【问题标题】:PHP imagejpeg() returns black image when using bigger resolution but works fine with lower resolution imagesPHP imagejpeg() 使用较大分辨率时返回黑色图像,但适用于较低分辨率的图像
【发布时间】:2020-09-09 21:47:30
【问题描述】:

您可以在我的网站上上传图片,我打算为每次上传设置至少 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 image imagejpeg


    【解决方案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/

    【讨论】:

    • 更好的是,尝试使用 libvips。 github.com/libvips/php-vips 我从来没有在 PHP 中使用过它,但总体上它比 Imagemagick 快。
    • @Brad 谢谢,看起来不错。
    • 没有 libvips 或 imagemagick,因为我的托管服务不会安装任何东西.. 至少现在.. 感谢建议我会尽快尝试.. 否则我将不得不找到解决方法..
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2023-03-21
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多