PHP imagejpeg() returns 使用较大分辨率时为黑色图像,但使用较低分辨率图像时效果很好
PHP imagejpeg() returns black image when using bigger resolution but works fine with lower resolution images
在我的网站上,您可以上传图片,我打算允许每次上传至少 16k 分辨率。在网站上显示图片时,我想使用缩略图。
要创建缩略图,我使用下面的 php 代码:
<?php
$imageUploadFile = $_FILES["passimagefile"]["tmp_name"];
$src = imagecreatefromjpeg($imageUploadFile);
list( $width, $height ) = getimagesize( $imageUploadFile );
$tmp = imagecreatetruecolor( $width / $height * 700, 700 );
imagecopyresampled($tmp, $src, 0, 0, 0, 0, $width / $height * 700, 700, $width, $height);
imagejpeg($tmp, $taget_thumbnail, 75);
?>
这对于大多数较小的 (1k-4k) 图像来说效果很好。正在正确生成缩略图。但是,当我尝试使用 6k 或 8k 的图像进行处理时,结果突然出错了。
正在生成缩略图,但它是全黑的。
有办法解决这个问题吗?
php-gd有很多怪癖,经常需要反复试验!
您可能已达到内部限制,因此请尝试生成您的图像,但在导出之前将其缩小,示例:
$tmp = imagescale($tmp, 1920, 1080);
$tmp = imagecrop($tmp, ['x' => 0, 'y' => 0, 'width' => 1920, 'height' => 1080]);
// ...
imagejpeg($tmp, $taget_thumbnail, 75);
如果不行,你得考虑拼接很多图片,拼贴。
对于高级的东西,在 Linux 中,您可以尝试使用 shell(来自 php)和 imagemagick。 http://www.imagemagick.org/Usage/text/
在与我的托管平台的客户服务交谈后,我终于找到了问题,事实证明我对 smtp 的上传限制是 20MB,因此它不适用于更大的文件。
所以我想@NVRM 的回答是最正确最贴切的。
顺便说一下,解决方案是获得一个 VPS 托管,在那里我不会有上传限制..
在我的网站上,您可以上传图片,我打算允许每次上传至少 16k 分辨率。在网站上显示图片时,我想使用缩略图。
要创建缩略图,我使用下面的 php 代码:
<?php
$imageUploadFile = $_FILES["passimagefile"]["tmp_name"];
$src = imagecreatefromjpeg($imageUploadFile);
list( $width, $height ) = getimagesize( $imageUploadFile );
$tmp = imagecreatetruecolor( $width / $height * 700, 700 );
imagecopyresampled($tmp, $src, 0, 0, 0, 0, $width / $height * 700, 700, $width, $height);
imagejpeg($tmp, $taget_thumbnail, 75);
?>
这对于大多数较小的 (1k-4k) 图像来说效果很好。正在正确生成缩略图。但是,当我尝试使用 6k 或 8k 的图像进行处理时,结果突然出错了。
正在生成缩略图,但它是全黑的。
有办法解决这个问题吗?
php-gd有很多怪癖,经常需要反复试验!
您可能已达到内部限制,因此请尝试生成您的图像,但在导出之前将其缩小,示例:
$tmp = imagescale($tmp, 1920, 1080);
$tmp = imagecrop($tmp, ['x' => 0, 'y' => 0, 'width' => 1920, 'height' => 1080]);
// ...
imagejpeg($tmp, $taget_thumbnail, 75);
如果不行,你得考虑拼接很多图片,拼贴。
对于高级的东西,在 Linux 中,您可以尝试使用 shell(来自 php)和 imagemagick。 http://www.imagemagick.org/Usage/text/
在与我的托管平台的客户服务交谈后,我终于找到了问题,事实证明我对 smtp 的上传限制是 20MB,因此它不适用于更大的文件。
所以我想@NVRM 的回答是最正确最贴切的。
顺便说一下,解决方案是获得一个 VPS 托管,在那里我不会有上传限制..