水平翻转图像
时间:2020-03-05 18:54:25 来源:igfitidea点击:
我需要翻转图像,以使角色朝向正确的方向。正如他们所说,这需要"即时"完成。
我遇到的问题是,对于Gif图像,我似乎失去了透明度。 (背景变为白色)
下面是代码:(或者有人可以给我举一个好例子)
$img = imagecreatefromgif("./unit.gif"); $size_x = imagesx($img); $size_y = imagesy($img); $temp = imagecreatetruecolor($size_x, $size_y); imagecolortransparent($img, imagecolorallocate($img, 0, 0, 0)); imagealphablending($img, false); imagesavealpha($img, true); $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y); if ($x) { $img = $temp; } else { die("Unable to flip image"); } header("Content-type: image/gif"); imagegif($img); imagedestroy($img);
解决方案
回答
如果可以保证ImageMagick的存在,则可以使用它们的mogrify -flop
命令。它保留了透明度。
回答
这不应该:
imagecolortransparent($img, imagecolorallocate($img, 0, 0, 0)); imagealphablending($img, false); imagesavealpha($img, true);
...是这样的:
imagecolortransparent($temp, imagecolorallocate($img, 0, 0, 0)); imagealphablending($temp, false); imagesavealpha($temp, true);
请注意,我们应该为创建的$ temp映像而不是源映像调用这些函数。
回答
最终结果:
$size_x = imagesx($img); $size_y = imagesy($img); $temp = imagecreatetruecolor($size_x, $size_y); imagecolortransparent($temp, imagecolorallocate($temp, 0, 0, 0)); imagealphablending($temp, false); imagesavealpha($temp, true); $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y); if ($x) { $img = $temp; } else { die("Unable to flip image"); } header("Content-type: image/gif"); imagegif($img); imagedestroy($img);