php 在png格式的图片上合成文字?

时间:2023-02-10 23:15:50
RT

需要在png格式的图片上合成一些文字,但是为什么会有黑色的背景?

原图是 php 在png格式的图片上合成文字?

但是我生成的图片是这样的

浏览器看的效果
php 在png格式的图片上合成文字?

我需要在原图下面的空白处合成一些字在居中位置,请高手帮帮忙!

8 个解决方案

#1


php 在png格式的图片上合成文字?

#2


你是可能从真彩背景(imagecreatetruecolor)中创建的画布
imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

不妨贴下你的代码看看

#3


图片使用了 png 特有的透明效果(photshop看到的是全透明效果)
在 GD 中拷贝一下就可以了
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

imagepng($im2);
php 在png格式的图片上合成文字?

#4


引用 3 楼 xuzuning 的回复:
图片使用了 png 特有的透明效果(photshop看到的是全透明效果)
在 GD 中拷贝一下就可以了
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

imagepng($im2);
php 在png格式的图片上合成文字?


但是我要的是这样的效果啊,就是不破坏原有的png图片的情况下,在图片的下面空白处,加一些文字啊。效果如下图 php 在png格式的图片上合成文字?

帮忙看看,该怎么实现呢?

#5


php 在png格式的图片上合成文字?

人都哪去了,媒人愿意帮帮忙么?

百度都百了半天了

#6


引用 2 楼 dream1206 的回复:
你是可能从真彩背景(imagecreatetruecolor)中创建的画布
imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

不妨贴下你的代码看看


$file = '1.png';
    
    #打开图片
    $im = @imagecreatefrompng($file);

    #设置水印字体颜色
    $color = imagecolorallocatealpha($im,0,0,0);


    #设置字体文件路径
    $fontfile = "msyhbd.ttf";

    #水印文字
   $str = "我们都是好孩子";

    #打水印
    imagettftext($im,30,0,50,400,$color,$fontfile,$str);
imagettftext($im,20,0,50,450,$color,$fontfile,$str);
imagettftext($im,20,0,50,480,$color,$fontfile,$str);


    header("Content-Type: image/png");
    $newfile = imagepng($im);

//imagedestroy($im);
   // imagejpeg($im,'water.jpg');


请帮忙看看,谢谢!

#7


y坐标400不都跑到图片外去了吗?
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);

//这几行必须有,否则原图的阴影层过不来
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

    #设置水印字体颜色
    $color = imagecolorallocatealpha($im2,0,0,0,100);
 
 
    #设置字体文件路径
    $fontfile = "msyhbd.ttf";
$fontfile = "c:/windows/fonts/FZJZJW.TTF";
 
    #水印文字
      $str = "我们都是好孩子";
$str = iconv('gbk', 'utf-8', $str);

    #打水印
    imagettftext($im2,20,20,20,100,$color,$fontfile,$str);
    imagettftext($im2,20,20,30,200,$color,$fontfile,$str);
    imagettftext($im2,20,20,40,300,$color,$fontfile,$str);

imagepng($im2);
php 在png格式的图片上合成文字?

#8


引用 7 楼 xuzuning 的回复:
y坐标400不都跑到图片外去了吗?
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);

//这几行必须有,否则原图的阴影层过不来
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

    #设置水印字体颜色
    $color = imagecolorallocatealpha($im2,0,0,0,100);
 
 
    #设置字体文件路径
    $fontfile = "msyhbd.ttf";
$fontfile = "c:/windows/fonts/FZJZJW.TTF";
 
    #水印文字
      $str = "我们都是好孩子";
$str = iconv('gbk', 'utf-8', $str);

    #打水印
    imagettftext($im2,20,20,20,100,$color,$fontfile,$str);
    imagettftext($im2,20,20,30,200,$color,$fontfile,$str);
    imagettftext($im2,20,20,40,300,$color,$fontfile,$str);

imagepng($im2);
php 在png格式的图片上合成文字?


貌似背景有边框了,不过还是谢谢了,我自己改了下,现在成功了,太感谢了!

#1


php 在png格式的图片上合成文字?

#2


你是可能从真彩背景(imagecreatetruecolor)中创建的画布
imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

不妨贴下你的代码看看

#3


图片使用了 png 特有的透明效果(photshop看到的是全透明效果)
在 GD 中拷贝一下就可以了
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

imagepng($im2);
php 在png格式的图片上合成文字?

#4


引用 3 楼 xuzuning 的回复:
图片使用了 png 特有的透明效果(photshop看到的是全透明效果)
在 GD 中拷贝一下就可以了
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

imagepng($im2);
php 在png格式的图片上合成文字?


但是我要的是这样的效果啊,就是不破坏原有的png图片的情况下,在图片的下面空白处,加一些文字啊。效果如下图 php 在png格式的图片上合成文字?

帮忙看看,该怎么实现呢?

#5


php 在png格式的图片上合成文字?

人都哪去了,媒人愿意帮帮忙么?

百度都百了半天了

#6


引用 2 楼 dream1206 的回复:
你是可能从真彩背景(imagecreatetruecolor)中创建的画布
imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

不妨贴下你的代码看看


$file = '1.png';
    
    #打开图片
    $im = @imagecreatefrompng($file);

    #设置水印字体颜色
    $color = imagecolorallocatealpha($im,0,0,0);


    #设置字体文件路径
    $fontfile = "msyhbd.ttf";

    #水印文字
   $str = "我们都是好孩子";

    #打水印
    imagettftext($im,30,0,50,400,$color,$fontfile,$str);
imagettftext($im,20,0,50,450,$color,$fontfile,$str);
imagettftext($im,20,0,50,480,$color,$fontfile,$str);


    header("Content-Type: image/png");
    $newfile = imagepng($im);

//imagedestroy($im);
   // imagejpeg($im,'water.jpg');


请帮忙看看,谢谢!

#7


y坐标400不都跑到图片外去了吗?
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);

//这几行必须有,否则原图的阴影层过不来
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

    #设置水印字体颜色
    $color = imagecolorallocatealpha($im2,0,0,0,100);
 
 
    #设置字体文件路径
    $fontfile = "msyhbd.ttf";
$fontfile = "c:/windows/fonts/FZJZJW.TTF";
 
    #水印文字
      $str = "我们都是好孩子";
$str = iconv('gbk', 'utf-8', $str);

    #打水印
    imagettftext($im2,20,20,20,100,$color,$fontfile,$str);
    imagettftext($im2,20,20,30,200,$color,$fontfile,$str);
    imagettftext($im2,20,20,40,300,$color,$fontfile,$str);

imagepng($im2);
php 在png格式的图片上合成文字?

#8


引用 7 楼 xuzuning 的回复:
y坐标400不都跑到图片外去了吗?
$url = 'https://img-bbs.csdn.net/upload/201310/29/1383042869_349074.png';
$im1 = imagecreatefrompng($url);

//这几行必须有,否则原图的阴影层过不来
$im2 = imagecreatetruecolor(imagesx($im1), imagesy($im1));
$bg = imagecolorallocate($im2, 255, 255, 255);
imagefill($im2, 0, 0, $bg);
imagecopy($im2, $im1, 0, 0, 0, 0, imagesx($im1), imagesy($im1));

    #设置水印字体颜色
    $color = imagecolorallocatealpha($im2,0,0,0,100);
 
 
    #设置字体文件路径
    $fontfile = "msyhbd.ttf";
$fontfile = "c:/windows/fonts/FZJZJW.TTF";
 
    #水印文字
      $str = "我们都是好孩子";
$str = iconv('gbk', 'utf-8', $str);

    #打水印
    imagettftext($im2,20,20,20,100,$color,$fontfile,$str);
    imagettftext($im2,20,20,30,200,$color,$fontfile,$str);
    imagettftext($im2,20,20,40,300,$color,$fontfile,$str);

imagepng($im2);
php 在png格式的图片上合成文字?


貌似背景有边框了,不过还是谢谢了,我自己改了下,现在成功了,太感谢了!