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.