Php 剪切和上载PNG文件创建不可读文件

Php 剪切和上载PNG文件创建不可读文件,php,image,png,Php,Image,Png,我正在使用PHP处理一个.png文件上传,该文件被裁剪后上传。不管出于什么原因,我的第一次尝试是用黑色替换透明。在阅读了多个堆栈溢出问题并尝试了解决方案之后,我现在处于上载文件的阶段,但该文件无法读取且为0字节。出什么事了?(以下是其他问题的确切答案…) .jpeg工作正常,.png不太正常 我使用的代码: $dest_image = ImageCreateTrueColor($target_width, $target_height); switch ($search->

我正在使用PHP处理一个.png文件上传,该文件被裁剪后上传。不管出于什么原因,我的第一次尝试是用黑色替换透明。在阅读了多个堆栈溢出问题并尝试了解决方案之后,我现在处于上载文件的阶段,但该文件无法读取且为0字节。出什么事了?(以下是其他问题的确切答案…)

.jpeg工作正常,.png不太正常

我使用的代码:

$dest_image = ImageCreateTrueColor($target_width, $target_height);

        switch ($search->found_extension()) {
            case 'PNG':
            case 'png':
                imagealphablending($dest_image, false);
                imagesavealpha($dest_image, true);
                $source_image = imagecreatefrompng($image);

                $transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127);
                imagefilledrectangle($dest_image, 0, 0, $target_width, $target_height, $transparent);

                imagecopyresampled($dest_image, $source_image, 0, 0, $x, $y, $target_width, $target_height, $w, $h);
                header('Content-type: image/png');
                imagepng($dest_image, "../../" . $folder . "/" . cleanstring($userdata->id) . $hasher . ".png", $quality);
            break;

            case 'jpg':
            case 'jpeg':
            case 'JPG':
            case 'JPEG':
                imagealphablending($dest_image, false);
                imagesavealpha($dest_image, true);
                $source_image = imagecreatefromjpeg($image);

                imagecopyresampled($dest_image, $source_image, 0, 0, $x, $y, $target_width, $target_height, $w, $h);
                header('Content-type: image/jpeg');
                imagejpeg($dest_image, "../../" . $filename, $quality);
            break;
        }
尝试过的解决方案:


查看ajax请求响应,我发现错误是由
imagepng
imagejpeg
在第三个参数
quality
上的差异造成的


imagejpeg
是0-100(最佳质量)和
imagepng
是0-9(高度压缩)。

查看ajax请求响应,我发现错误是由
imagepng
imagejpeg
在第三个参数
quality
上的差异造成的


imagejpeg
是0-100(最佳质量),而
imagepng
是0-9(高度压缩)。

1。为什么要输出图像标题,2。为什么在png和jpg图像以及3中使用的路径有如此大的差异。
imagepng()
)的返回值是多少?@jeroen我认为在保存文件时必须使用图像头,路径上的差异只是因为扩展名“.png/.jpg”(一旦工作就会重写)。如何获取
imagepng()
的返回值?此代码由ajax调用调用。由于ajax调用需要返回text/html/json,因此不应设置图像头,仅当您希望将图像直接从脚本输出到浏览器时才这样做。由于您的代码非常重复,我会对jpg和png使用相同的代码,以便您可以轻松缩小问题的范围。@jeroen查看我自己的解决方案答案,谢谢您的帮助1。为什么要输出图像标题,2。为什么在png和jpg图像以及3中使用的路径有如此大的差异。
imagepng()
)的返回值是多少?@jeroen我认为在保存文件时必须使用图像头,路径上的差异只是因为扩展名“.png/.jpg”(一旦工作就会重写)。如何获取
imagepng()
的返回值?此代码由ajax调用调用。由于ajax调用需要返回text/html/json,因此不应设置图像头,仅当您希望将图像直接从脚本输出到浏览器时才这样做。由于您的代码非常重复,我将使用相同的jpg和png代码,以便您可以轻松地缩小问题所在的范围。@jeroen查看我自己的解决方案答案,谢谢您的帮助