我一直在尝试使用我的应用程序(在存储它们之前动态调整图像大小)的透明度,并且我认为在对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
的流?
答案 0 :(得分:5)
Blech,结果最终归结于一个完全独立的GD调用,它正在验证图像上传。我忘记将imagealphablending
和imagesavealpha
添加到该代码中,并且它创建了一个新图像,然后将其传递给调整大小代码。无论如何应该改变哪个。非常感谢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可以将其再次加载到内存中)?
没有
您可以使用php v5.2.0中的data://
协议
示例:
// prints "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');