PHP GD imagecreatefromstring丢弃透明度

时间:2012-08-29 15:37:09

标签: php php-gd

我一直在尝试使用我的应用程序(在存储它们之前动态调整图像大小)的透明度,并且我认为在对imagealphablending和{{1}的误解之后我终于缩小了问题范围。 }。源图像永远不会加载适当的透明度!

imagesavealpha

从文件加载图像会有一些严重的架构难度;此代码与从iPhone应用程序查询的JSON API一起使用,在这种情况下(并且更加一致)在POST数据中将图像作为base64编码的字符串上载更容易。我绝对 需要 以某种方式将图像存储为文件(只是为了让PHP可以再次将其加载到内存中)?有没有办法从// With this line, the output image has no transparency (where it should be // transparent, colors bleed out randomly or it's completely black, depending // on the image) $img = imagecreatefromstring($fileData); // With this line, it works as expected. $img = imagecreatefrompng($fileName); // Blah blah blah, lots of image resize code into $img2 goes here; I finally // tried just outputting $img instead. header('Content-Type: image/png'); imagealphablending($img, FALSE); imagesavealpha($img, TRUE); imagepng($img); imagedestroy($img); 创建可以传递给$fileData的流?

3 个答案:

答案 0 :(得分:5)

Blech,结果最终归结于一个完全独立的GD调用,它正在验证图像上传。我忘记将imagealphablendingimagesavealpha添加到该代码中,并且它创建了一个新图像,然后将其传递给调整大小代码。无论如何应该改变哪个。非常感谢goldenparrot将字符串转换为文件名的绝佳方法。

答案 1 :(得分:4)

您可以使用此代码:

$new = imagecreatetruecolor($width, $height);

// preserve transparency

imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));

imagealphablending($new, false);

imagesavealpha($new, true);

imagecopyresampled($new, $img, 0, 0, $x, 0, $width, $height, $w, $h);

imagepng($new);

imagedestroy($new);

它会为您制作透明图像。祝你好运!

答案 2 :(得分:2)

  

我是否绝对需要以某种方式将图像存储为文件(以便PHP可以将其再次加载到内存中)?

没有

Documentation说:

您可以使用php v5.2.0中的data://协议

示例:

// prints "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');