Development

PHP jpg compression Imagick vs Vanilla

Compressing a jpg file in PHP can be done without installing a third-party library, we call this method Vanilla as it is done stock standard, no extras needed. Imagick is an image processing library for PHP. As theory goes you should be able to do more and be more effective with a framework such as Imagick.

This post does some testing of jpg image compression with Imagick and vanilla PHP.

The source jpg file which I found on Reddit was 1,728 KB in size.

source image

Using a foreach loop of 1 to 100

for ($i = 1; $i <= 100; $i++) {

}

The script compressed the source file using the loop number $i as the quality parameter, meaning i got an image with the quality 1 through to 100.

Imagick jpg compression code:

$img = new Imagick();
$img->readImage($image_file);
$img->setImageCompression(Imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality($i);
$img->stripImage();
$img->writeImage("imagick/$i.jpg");
$img->clear();

Vanilla jpg compression code:

$img = imagecreatefromjpeg($image_file);
imagejpeg($img,"normal/$i.jpg",$i);

Imagick took 20.25 seconds to process through the loop.

Vanilla took 14.12 seconds to process through the loop.

The first image that is under 500k in size for Imagick had quality setting of 17 whilst vanilla was 15.

For 1MB in size Imagick was 47 and vanilla 44.

Imagick file sizes with filename as quality value:

[{"file":"1.jpg","size":"81.38"},{"file":"10.jpg","size":"250.10"},{"file":"100.jpg","size":"3,960.58"},{"file":"11.jpg","size":"277.04"},{"file":"12.jpg","size":"300.33"},{"file":"13.jpg","size":"355.57"},{"file":"14.jpg","size":"364.47"},{"file":"15.jpg","size":"370.88"},{"file":"16.jpg","size":"405.62"},{"file":"17.jpg","size":"487.41"},{"file":"18.jpg","size":"502.05"},{"file":"19.jpg","size":"511.64"},{"file":"2.jpg","size":"81.41"},{"file":"20.jpg","size":"517.65"},{"file":"21.jpg","size":"523.56"},{"file":"22.jpg","size":"535.80"},{"file":"23.jpg","size":"550.16"},{"file":"24.jpg","size":"593.19"},{"file":"25.jpg","size":"680.90"},{"file":"26.jpg","size":"746.68"},{"file":"27.jpg","size":"757.84"},{"file":"28.jpg","size":"766.32"},{"file":"29.jpg","size":"772.86"},{"file":"3.jpg","size":"85.95"},{"file":"30.jpg","size":"792.36"},{"file":"31.jpg","size":"804.23"},{"file":"32.jpg","size":"808.30"},{"file":"33.jpg","size":"813.13"},{"file":"34.jpg","size":"815.69"},{"file":"35.jpg","size":"825.52"},{"file":"36.jpg","size":"833.11"},{"file":"37.jpg","size":"838.36"},{"file":"38.jpg","size":"857.03"},{"file":"39.jpg","size":"867.53"},{"file":"4.jpg","size":"98.94"},{"file":"40.jpg","size":"868.35"},{"file":"41.jpg","size":"877.50"},{"file":"42.jpg","size":"880.53"},{"file":"43.jpg","size":"882.30"},{"file":"44.jpg","size":"897.70"},{"file":"45.jpg","size":"916.44"},{"file":"46.jpg","size":"939.22"},{"file":"47.jpg","size":"962.54"},{"file":"48.jpg","size":"1,040.80"},{"file":"49.jpg","size":"1,194.96"},{"file":"5.jpg","size":"115.54"},{"file":"50.jpg","size":"1,275.98"},{"file":"51.jpg","size":"1,317.21"},{"file":"52.jpg","size":"1,402.73"},{"file":"53.jpg","size":"1,428.66"},{"file":"54.jpg","size":"1,436.24"},{"file":"55.jpg","size":"1,443.56"},{"file":"56.jpg","size":"1,450.43"},{"file":"57.jpg","size":"1,460.59"},{"file":"58.jpg","size":"1,469.35"},{"file":"59.jpg","size":"1,472.23"},{"file":"6.jpg","size":"136.41"},{"file":"60.jpg","size":"1,473.96"},{"file":"61.jpg","size":"1,480.62"},{"file":"62.jpg","size":"1,490.04"},{"file":"63.jpg","size":"1,499.12"},{"file":"64.jpg","size":"1,518.45"},{"file":"65.jpg","size":"1,556.50"},{"file":"66.jpg","size":"1,576.86"},{"file":"67.jpg","size":"1,614.01"},{"file":"68.jpg","size":"1,647.72"},{"file":"69.jpg","size":"1,658.46"},{"file":"7.jpg","size":"157.75"},{"file":"70.jpg","size":"1,672.28"},{"file":"71.jpg","size":"1,687.88"},{"file":"72.jpg","size":"1,693.05"},{"file":"73.jpg","size":"1,714.09"},{"file":"74.jpg","size":"1,727.16"},{"file":"75.jpg","size":"1,727.14"},{"file":"76.jpg","size":"1,739.75"},{"file":"77.jpg","size":"1,754.29"},{"file":"78.jpg","size":"1,787.50"},{"file":"79.jpg","size":"1,799.46"},{"file":"8.jpg","size":"186.37"},{"file":"80.jpg","size":"1,823.62"},{"file":"81.jpg","size":"1,845.14"},{"file":"82.jpg","size":"1,882.13"},{"file":"83.jpg","size":"1,966.99"},{"file":"84.jpg","size":"1,984.24"},{"file":"85.jpg","size":"1,962.58"},{"file":"86.jpg","size":"2,018.34"},{"file":"87.jpg","size":"2,036.70"},{"file":"88.jpg","size":"2,071.39"},{"file":"89.jpg","size":"2,087.75"},{"file":"9.jpg","size":"216.17"},{"file":"90.jpg","size":"2,143.01"},{"file":"91.jpg","size":"2,169.05"},{"file":"92.jpg","size":"2,211.44"},{"file":"93.jpg","size":"2,396.76"},{"file":"94.jpg","size":"2,473.13"},{"file":"95.jpg","size":"2,551.86"},{"file":"96.jpg","size":"2,726.23"},{"file":"97.jpg","size":"2,901.91"},{"file":"98.jpg","size":"3,020.63"},{"file":"99.jpg","size":"3,498.13"}]

Vanilla file sizes with filename as quality value:

[{"file":"1.jpg","size":"198.00"},{"file":"10.jpg","size":"364.67"},{"file":"100.jpg","size":"6,379.88"},{"file":"11.jpg","size":"386.55"},{"file":"12.jpg","size":"409.15"},{"file":"13.jpg","size":"469.62"},{"file":"14.jpg","size":"475.41"},{"file":"15.jpg","size":"479.99"},{"file":"16.jpg","size":"515.82"},{"file":"17.jpg","size":"603.91"},{"file":"18.jpg","size":"615.72"},{"file":"19.jpg","size":"621.28"},{"file":"2.jpg","size":"198.04"},{"file":"20.jpg","size":"624.65"},{"file":"21.jpg","size":"628.02"},{"file":"22.jpg","size":"636.37"},{"file":"23.jpg","size":"651.59"},{"file":"24.jpg","size":"699.67"},{"file":"25.jpg","size":"799.31"},{"file":"26.jpg","size":"862.29"},{"file":"27.jpg","size":"872.00"},{"file":"28.jpg","size":"878.37"},{"file":"29.jpg","size":"881.25"},{"file":"3.jpg","size":"203.02"},{"file":"30.jpg","size":"890.28"},{"file":"31.jpg","size":"897.27"},{"file":"32.jpg","size":"900.27"},{"file":"33.jpg","size":"903.64"},{"file":"34.jpg","size":"905.18"},{"file":"35.jpg","size":"912.37"},{"file":"36.jpg","size":"917.97"},{"file":"37.jpg","size":"922.06"},{"file":"38.jpg","size":"938.35"},{"file":"39.jpg","size":"945.63"},{"file":"4.jpg","size":"216.42"},{"file":"40.jpg","size":"946.18"},{"file":"41.jpg","size":"952.94"},{"file":"42.jpg","size":"955.72"},{"file":"43.jpg","size":"957.23"},{"file":"44.jpg","size":"971.39"},{"file":"45.jpg","size":"991.89"},{"file":"46.jpg","size":"1,019.95"},{"file":"47.jpg","size":"1,051.95"},{"file":"48.jpg","size":"1,137.83"},{"file":"49.jpg","size":"1,305.97"},{"file":"5.jpg","size":"233.66"},{"file":"50.jpg","size":"1,391.94"},{"file":"51.jpg","size":"1,430.88"},{"file":"52.jpg","size":"1,515.27"},{"file":"53.jpg","size":"1,536.76"},{"file":"54.jpg","size":"1,545.77"},{"file":"55.jpg","size":"1,553.12"},{"file":"56.jpg","size":"1,560.19"},{"file":"57.jpg","size":"1,569.52"},{"file":"58.jpg","size":"1,577.18"},{"file":"59.jpg","size":"1,579.89"},{"file":"6.jpg","size":"253.69"},{"file":"60.jpg","size":"1,581.59"},{"file":"61.jpg","size":"1,586.44"},{"file":"62.jpg","size":"1,592.19"},{"file":"63.jpg","size":"1,599.67"},{"file":"64.jpg","size":"1,609.08"},{"file":"65.jpg","size":"1,632.40"},{"file":"66.jpg","size":"1,644.03"},{"file":"67.jpg","size":"1,668.47"},{"file":"68.jpg","size":"1,698.63"},{"file":"69.jpg","size":"1,708.77"},{"file":"7.jpg","size":"274.04"},{"file":"70.jpg","size":"1,719.60"},{"file":"71.jpg","size":"1,733.22"},{"file":"72.jpg","size":"1,736.93"},{"file":"73.jpg","size":"1,753.55"},{"file":"74.jpg","size":"1,764.70"},{"file":"75.jpg","size":"1,764.68"},{"file":"76.jpg","size":"1,775.75"},{"file":"77.jpg","size":"1,791.14"},{"file":"78.jpg","size":"1,822.21"},{"file":"79.jpg","size":"1,834.50"},{"file":"8.jpg","size":"301.60"},{"file":"80.jpg","size":"1,860.70"},{"file":"81.jpg","size":"1,884.13"},{"file":"82.jpg","size":"1,927.82"},{"file":"83.jpg","size":"2,072.39"},{"file":"84.jpg","size":"2,224.14"},{"file":"85.jpg","size":"2,280.43"},{"file":"86.jpg","size":"2,384.95"},{"file":"87.jpg","size":"2,413.37"},{"file":"88.jpg","size":"2,461.05"},{"file":"89.jpg","size":"2,477.23"},{"file":"9.jpg","size":"330.38"},{"file":"90.jpg","size":"2,755.22"},{"file":"91.jpg","size":"2,808.72"},{"file":"92.jpg","size":"2,872.00"},{"file":"93.jpg","size":"3,266.50"},{"file":"94.jpg","size":"3,530.34"},{"file":"95.jpg","size":"3,698.27"},{"file":"96.jpg","size":"3,976.60"},{"file":"97.jpg","size":"4,318.20"},{"file":"98.jpg","size":"4,513.90"},{"file":"99.jpg","size":"5,254.97"}]

As for useable quality i found anything lower than 18 started to really change from what the source image was.

Here is vanilla compression 18 which is 616 KB

Imagick at 18 was 502 KB

Compression rates and outcomes are going to be dependent on your usage and means. Given you can easily cut the image file size in half and not noticeably distort it, this is good news for archivists and web designers.

If you pixel peep the suns and clouds in the compressed copies show sharpened color changes however without zooming in these copies give the same perception as the source image.

 

 

Share
Tags: PHPWeb Dev

Recent Posts

Kennington reservoir drained drone images

A drained and empty Kennington reservoir images from a drone in early July 2024. The…

1 year ago

Merrimu Reservoir drone images

Merrimu Reservoir from drone. Click images to view larger.

1 year ago

FTP getting array of file details such as size using PHP

Using FTP and PHP to get an array of file details such as size and…

2 years ago

Creating Laravel form requests

Creating and using Laravel form requests to create cleaner code, separation and reusability for your…

2 years ago

Improving the default Laravel login and register views

Improving the default Laravel login and register views in such a simple manner but making…

2 years ago

Laravel validation for checking if value exists in the database

Laravel validation for checking if a field value exists in the database. The validation rule…

2 years ago