为了账号安全,请及时绑定邮箱和手机立即绑定

PHP imagejpeg() 在使用较大的分辨率时返回黑色图像,但在较低分辨率的图像上工作正常

PHP imagejpeg() 在使用较大的分辨率时返回黑色图像,但在较低分辨率的图像上工作正常

PHP
江户川乱折腾 2023-04-15 16:41:00
在我的网站上,您可以上传图片,我打算允许每次上传至少 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 之类的图像进行处理时,结果突然出错了。正在生成缩略图,但它是全黑的。有没有办法来解决这个问题?
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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。

查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信