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.

php jpg compression source image
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

php jpg compression normal 18

Imagick at 18 was 502 KB

php jpg compression imagick 18Compression 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.