代码之家  ›  专栏  ›  技术社区  ›  Fer

如何在CodeIgniter中压缩图像,但不改变其尺寸?

  •  3
  • Fer  · 技术社区  · 15 年前

    我有一个用户可以上传图片的网站。我直接处理这些图像,并使用CodeIgniter图像处理类将它们调整为5种其他格式。我的工作效率很高,具体如下:

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

    在我从另一个问题中得到建议后,我实施了上述方法。我的测试用例是一个1.6mbjpeg,在RGB模式下,分辨率为3872x 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%而不改变尺寸吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alix Axel    15 年前

    我想你可以这样做:

    $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更简单。


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

    推荐文章