gpt4 book ai didi

php - 如何在 CodeIgniter 中压缩图像,但不改变它们的尺寸?

转载 作者:搜寻专家 更新时间:2023-10-31 21:18:59 26 4
gpt4 key购买 nike

我有一个网站,用户可以在其中上传图片。我直接处理这些图像并使用 CodeIgniter Image Manipulation 类将它们调整为 5 种附加格式。我这样做非常有效,如下所示:

  • 我总是根据以前的格式而不是原始格式调整大小
  • 我使用 90% 的图像质量调整大小,这大约是 jpeg 文件大小的一半

我在从另一个问题中得到建议后实现了上述做事方式。我的测试用例是 RGB 模式下的 1.6MB JPEG,分辨率为 3872 x 2592。对于该图像,这是一种边缘情况,调整大小过程总共需要大约 2 秒,这对我来说是可以接受的。

现在,只剩下一项挑战了。我希望使用 90% 的质量压缩原始文件,但不调整其大小。这个想法是该文件也将占用文件大小的一半。我想我可以简单地将它的大小调整到它的当前尺寸,但这似乎对文件或其大小没有任何影响。这是我的代码,有些简化:

$sourceimage = "test.jpg";
$resize_settings['image_library'] = 'gd2';
$resize_settings['source_image'] = $sourceimage;
$resize_settings['maintain_ratio'] = false;
$resize_settings['quality'] = '90%';
$this->load->library('image_lib', $resize_settings);

$resize_settings['width'] = $imagefile['width'];
$resize_settings['height'] = $imagefile['height'];
$resize_settings['new_image'] = $filename;
$this->image_lib->initialize($resize_settings);
$this->image_lib->resize();

以上代码适用于除原始格式之外的所有格式。我尝试调试 CI 类以查看为什么没有任何反应,我注意到脚本检测到尺寸没有改变。接下来,它只是简单地复制该文件,根本不对其进行处理。我评论了那段代码以强制它调整大小,但现在仍然没有任何反应。

有人知道如何使用 CI 类在不改变尺寸的情况下将图像(任何图像,不仅仅是 jpeg)压缩到 90% 吗?

最佳答案

我想你可以这样做:

$original_size = getimagesize('/path/to/original.jpg');

然后像这样设置以下选项:

$resize_settings['width'] = $original_size[0];
$resize_settings['height'] = $original_size[1];

好吧,由于 CI 试图变得聪明,所以这不起作用,在我看来,您有三种可能的选择:

  • 将图片旋转 360º
  • 为图像加水印(使用 1x1 透明图像)
  • 自己动手

DIY 方法非常简单,我知道你不想使用“自定义”功能,但看看:

ImageJPEG(ImageCreateFromString(file_get_contents('/path/to/original.jpg')), '/where/to/save/optimized.jpg', 90);

如您所见,它比使用 CI 更简单。


PS:上面的代码片段可以打开任何类型的图像(GIF、PNG 和 JPEG),并且它始终将图像保存为 JPEG,质量为 90%,我相信这就是您要存档的图像。

关于php - 如何在 CodeIgniter 中压缩图像,但不改变它们的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1989888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com