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.
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
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.
A drained and empty Kennington reservoir images from a drone in early July 2024. The…
Merrimu Reservoir from drone. Click images to view larger.
Using FTP and PHP to get an array of file details such as size and…
Creating and using Laravel form requests to create cleaner code, separation and reusability for your…
Improving the default Laravel login and register views in such a simple manner but making…
Laravel validation for checking if a field value exists in the database. The validation rule…