Fix large image attachments in WordPress
An annoying problem we have encountered with WordPress is that if an attached image is under the alloted dimensions for the post, WordPress will not attempt to further manipulate it or resave it.
This typically happens when non-tech authors upload photos from photoshop saved at the highest quality settings, but already sized down to the post width.
Only the smaller dimensions will be created, sometime leaving main images with extremely large file sizes in posts which are a big problem, especially for mobile visitors. But you really do not want megabytes of images on each page, for any kind of visitor.
So here is a filter I whipped up to catch that problem and resave the jpegs at 90% quality, progressive format, which will typically cut the size down to one-third (100k) or less with no perceptible loss of quality. It has the added bonus of stripping exif data and other meta (like hidden adobe fingerprints) from the images to reduce the size as much as possible for the most speed.
add_filter('wp_generate_attachment_metadata','fix_large_jpg'); function fix_large_jpg($metadata) { if (!empty($metadata['width']) && $metadata['width']<601) { $file=wp_upload_dir(); $file=$file['basedir'].'/'.$metadata['file']; if (file_exists($file) && filesize($file)>200000) { $imageinfo = getimagesize($file); if (!empty($imageinfo['mime']) && $imageinfo['mime']=='image/jpeg') { $new=imagecreatefromjpeg($file); if ($new) { imageinterlace($new,1); imagejpeg($new,$file,90); imagedestroy($new); } } } } return $metadata; }
This could be expanded for png but jpeg was really the main problem and easily solvable by forced resaving. Note that the re-save comes AFTER the lower sizes are created, allowing them to use the high quality source before it’s replaced.
The only hardcoded settings are the 600 pixel width which you can edit to what is used for the posts on your site, and the 200k filesize trigger which you can lower or increase as desired.
This entry was posted on September 27, 2012 by _ck_. It was filed under WP fixes, WP performance and was tagged with attachments, images, photos, uploads, wodpress plugins.
God, you’re brilliant! Great stuff. Thanks.
September 28, 2012 at 9:20 pm