为什么此脚本适用于 jpeg 但不适用于 png


Why does this script work for jpeg but not png?

谁能告诉我为什么下面的代码不起作用?它输出零字节的图像 - 但这里是踢球者:当我将"png"更改为"jpg"或"jpeg"时,下面的代码可以正常工作(输出具有正常字节数的图像)。 png代码的src文件是bigpic.png,其中包含一个简单的透明背景的蝴蝶图标。 我有一个创建透明度的包含,但这不会导致 0 字节问题,因为当我省略该特定包含时,脚本会输出 0 字节图像。

感谢您的任何想法。

<?php
$x=$_REQUEST['x'];
 $y=$_REQUEST['y'];
 $x_change=$_REQUEST['x_change'];
 $y_change=$_REQUEST['y_change'];
 $numberofpics=$_REQUEST['numberofpics'];
$filename=$_REQUEST['filename'];
$c=0;

//SRC FILE IS A 1040x1040 PICTURE OF A BUTTERFLY ICON WITH TRANSPARENT BACKGROUND

while ($c<$numberofpics) {
        $src=$_REQUEST['src'];
        $src = imagecreatefrompng($src);
        $src_width=imagesx($src);
        $src_height=imagesy($src);
        $dest = imagecreatetruecolor(640, 360);
                $c=$c+1;

imagecopy($dest, $src, 0, 0, $x, $y, 640, 360);
header('Content-Type: image/png');
$thisfilename=$filename.$c.".png";
imagepng($dest,$thisfilename,100);
imagepng($dest);
imagedestroy($dest);
imagedestroy($src);
$x=$x+$x_change;
$y=$y+$y_change;
                                }
?>

您需要保持透明度。通过函数创建$dest图像后添加这些行imagecreatetruecolor

imagealphablending($dest, false);
imagesavealpha($dest, true);

您的问题出在 imagepng 的第三个参数(质量)中,它允许您将压缩级别从 0(无压缩)设置为 9。

您可以尝试header行注释以查看错误。

更新

由于我在您拥有的代码中发现了几个错误,因此我进行了一些修改:

<?php
$x = $_REQUEST['x'];
$y = $_REQUEST['y'];
$x_change = $_REQUEST['x_change'];
$y_change = $_REQUEST['y_change'];
$numberofpics = $_REQUEST['numberofpics'];
$filename = $_REQUEST['filename'];
$src = $_REQUEST['src'];
$src = imagecreatefrompng($src);
for ($c = 0; $c < $numberofpics; ++$c) {
  $dest = imagecreatetruecolor(640, 360);
  imagecopy($dest, $src, 0, 0, $x, $y, 640, 360);
  header('Content-Type: image/png');
  imagepng($dest, $filename . $c . '.png', 9);
  imagedestroy($dest);
  $x += $x_change;
  $y += $y_change;
}
imagedestroy($src);
相关文章: