谁能告诉我为什么下面的代码不起作用?它输出零字节的图像 - 但这里是踢球者:当我将"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);