I had an interesting problem today. Â I was uploading a third-party theme to a WordPress hosted on the server that I don’t control and really don’t have much access to. Â The server had a limitation of the upload size set to 10 MB. Â Yeah, I know. Â But not much I could do about that. Â The theme that I was uploading was packed into an 11 MB ZIP file. Â The theme itself was rather complicated (one of those commercially developed themes that are based on a framework and bring in a few plugins required for their functionality), so I couldn’t really remove anything from it.
Upon a quick inspection, I realized that more than half of the ZIP weight is due to a multitude of PNG images. Â And while some image were small and legitimate – like, say, icons – quite a few others were packing lots of bytes for nothing – demos, sample images, and such. Â Obviously, I wanted to reduce the size of these files significantly.
My usual tool of choice for such tasks is usually ImageMagick.  To tell you the truth, I rarely work with PNG images.  JPEGs are a more frequent target for me.  So, I didn’t realize that ImageMagick handles -quality parameter differently for different image formats as fast as I’d like.  But even when I did, the results weren’t all that great.  In fact, the file sizes slightly grew in my tests.
Looking for a different approach, I came across this article about a tool called optipng, which can be conveniently installed in Fedora via yum. Â Unleashing this tool onto my PNG image collection showed me that whoever made the WordPress theme new what they were doing. Â opmipng reported that all images are already optimized and there isn’t much to do.
That’s when I found yet another tool to play with. Â This discussion at StackOverflow SuperUser suggests pngquant, which is also a breeze to install on Fedora with yum. Â So finally, I did something like this:
$ sudo yum install -y pngquant $ cd folder/with/images $ pngquant --force --ext .png --quality=0-75 *.png
That gave me exactly what I needed – a sufficient enough reduction in file sizes for the ZIP archive to fit into the upload limit set on the server.