2

在我的网站上,您可以上传图片,我打算允许每次上传至少 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 的图像进行处理时,结果突然出错了。

正在生成缩略图,但它是完全黑色的。

有没有办法解决这个问题?

4

2 回答 2

1

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/

于 2020-05-22T23:49:38.067 回答
0

最后我在与我的托管平台的客户服务交谈后发现了问题,事实证明我对 smtp 的上传限制是 20MB,因此它不适用于更大的文件。

所以我猜@NVRM 的回答是最正确和最合适的。

顺便说一句,解决方案是获得 VPS 托管,我不会有上传限制..

于 2020-08-20T13:53:47.177 回答