为什么这个脚本适用于jpeg但不适用于png?

时间:2015-03-08 20:35:16

标签: php php-gd

任何人都可以告诉我为什么以下代码不起作用?它以ZERO字节输出图像 - 但这里是踢球者:当我将“png”改为“jpg”或“jpeg”时,下面的代码正常工作(输出具有正常字节数的图像)。 png代码的src文件是bigpic.png,其中包含一个带有透明背景的简单蝴蝶图标。我有一个创建透明度的include,但是这不会导致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;

                                }

?>

2 个答案:

答案 0 :(得分:0)

您的问题出现在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);

答案 1 :(得分:0)

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

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