将任何类型的图像转换为PNG并添加到PNG

时间:2016-05-09 16:26:51

标签: php image image-processing image-manipulation

我正在尝试为我开发的网站创建员工海报。我的目标是从任何文件类型(.png,.gif,.jpeg等)的服务器上的目录中获取图像,并将其复制到另一个生成的图像上,然后将其输出到浏览器。

问题在于我使用:

$final_image = imagecreatefrompng("large_background.png");

用于制作最终图像,并且由于某种原因,如果我添加jpeg' s,gif' s等类型的个人资料图像(任何类型的不是j jg),它不会'工作。图像永远不会出现在输出中。但是,如果我使用png' s确实有效。

为了解决这个问题,我尝试将图像转换为png,然后从中创建一个png,如下面的代码所示。不幸的是它没有用。个人资料图片仍未显示在背景上。

// get image from database 
$image_from_database = could be a .png, .jpeg, .gif, etc.

// get the image from the profile images directory
$path = "profile_images/".$image_from_database;

// create a png out of the image
$image = imagecreatefrompng(imagepng($path));

// add the $image to my larger $final_image (which is a png)
imagecopy($final_image, $image, $x, $y, 0,0, $height, $width);
imagepng($final_image, $ouput_url);
...

有谁可以告诉我为什么这不起作用?我的个人资料图片未显示在最终图像的输出中。

我的问题,

  • 这条线imagecreatefrompng(imagepng(...));是否可能?基本上我想将任何类型的图像转换为png,然后从中创建一个png。

2 个答案:

答案 0 :(得分:0)

我刚刚运行了一些本地测试...以下工作:

$src = imagecreatefromgif('test.gif');
$dest = imagecreatefrompng('test.png');

imagecopy($dest, $src, 0, 0, 0, 0, 100, 100);

header('Content-Type: image/png');
imagepng($dest);

imagedestroy($src);
imagedestroy($dest);

这样做:

$src = imagecreatefromstring(file_get_contents('test.gif'));

如果您在尝试后一个示例后仍遇到问题,请更新您的问题。除了功能代码示例之外,您正在使用的实际图像会很有用。

答案 1 :(得分:0)

在您阅读带有imagecreatefrom*功能的图像后,原件的格式并不重要。
imagecreatefrom*个函数返回图像资源。加载图像时,您使用的是图像的内部表示,而不是PNG,JPEG或GIF图像 如果图像成功加载imagecopy应该没有问题。

此代码使用不同格式的图像,并且没有问题:

$img = imagecreatefrompng('bg.png');
$png_img = imagecreatefrompng('img.png');
$jpeg_img = imagecreatefromjpeg('img.jpeg');
$gif_img = imagecreatefromgif('img.gif');

/* or use this, so you don't need to figure out which imagecreatefrom* function to use
$img = imagecreatefromstring(file_get_contents('bg.png'));
$png_img = imagecreatefromstring(file_get_contents('img.png'));
$jpeg_img = imagecreatefromstring(file_get_contents('img.jpeg'));
$gif_img = imagecreatefromstring(file_get_contents('img.gif'));
*/
imagecopyresampled($img, $png_img,   10, 10, 0,0, 100, 100, 200, 200);
imagecopyresampled($img, $jpeg_img, 120, 10, 0,0, 100, 100, 200, 200);
imagecopyresampled($img, $gif_img,  230, 10, 0,0, 100, 100, 200, 200);

header('Content-Type: image/png');
imagepng($img);

你的例子

$image = imagecreatefrompng(imagepng($path));

错了。
imagepng用于将图像资源输出为PNG图像。如果您提供路径作为第二个参数,则会创建PNG图像文件,否则它会像echo一样打印到输出中。 imagepng实际返回的是布尔值,表示输出是否成功 然后,您将该布尔值传递给期望文件路径的imagecreatefrompng。这显然是错误的。

我怀疑你在加载图片时遇到问题 imagecreatefrom*函数在失败时会返回FALSE,如果您对此有任何问题,请检查。

也许您的图片路径与doc root相关,而您的工作目录也不同 或者你有许可问题。
或者您的图像丢失了。
从你的问题中无法分辨出来。