-
-
Save tjhole/1529cb6994438f73750ab93cf0b3def2 to your computer and use it in GitHub Desktop.
Blurring image using WordPress
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Several functions relatting to blurring images on uploaded. | |
* @see https://codeable.io/community/how-to-watermark-wordpress-images-with-imagemagick/ | |
*/ | |
add_image_size( 'background-image-blurred', 1920, 1080, true ); | |
function generate_blurred_image( $meta ) { | |
$time = substr( $meta['file'], 0, 7); // Extract the date in form "2015/04" | |
$upload_dir = wp_upload_dir( $time ); // Get the "proper" upload dir | |
if( isset($meta['sizes']['background-image-blurred']['file']) ) { | |
$filename = $meta['sizes']['background-image-blurred']['file']; | |
$meta['sizes']['background-image-blurred']['file'] = blur_image( $filename, $upload_dir ); | |
} | |
return $meta; | |
} | |
function blur_image( $filename, $upload_dir ) { | |
$original_image_path = trailingslashit( $upload_dir['path'] ) . $filename; | |
$image_resource = new Imagick( $original_image_path ); | |
$image_resource->gaussianBlurImage( 10, 100 ); // See: http://phpimagick.com/Imagick/gaussianBlurImage | |
return save_blurred_image( $image_resource, $original_image_path ); | |
} | |
function save_blurred_image( $image_resource, $original_image_path ) { | |
$image_data = pathinfo( $original_image_path ); | |
$new_filename = $image_data['filename'] . '-blurred.' . $image_data['extension']; | |
// Build path to new blurred image | |
$blurred_image_path = str_replace($image_data['basename'], $new_filename, $original_image_path); | |
if ( ! $image_resource->writeImage( $blurred_image_path ) ) { | |
return $image_data['basename']; | |
} | |
// Delete the placeholder image WordPress made now that it's been blurred | |
unlink( $original_image_path ); | |
return $new_filename; | |
} | |
add_filter( 'wp_generate_attachment_metadata', 'generate_blurred_image' ); | |
function force_add_size( $metadata, $id ){ | |
$upload_dir = wp_upload_dir(); | |
$filename = $upload_dir['basedir'].'/'.$metadata['file']; | |
$extension = strtolower(strrchr($metadata['file'], '.')); | |
$newfilename = str_replace($extension, '-blurred', $filename).$extension; | |
$image_resource = new Imagick( $filename); | |
$image_resource->gaussianBlurImage( 10, 100 ); // See: http://phpimagick.com/Imagick/gaussianBlurImage | |
$image_resource->writeImage( $newfilename ); | |
/* | |
$image_resource->resizeImage(1920, 1080, Imagick::FILTER_GAUSSIAN, 70); // http://www.dylanbeattie.net/magick/filters/result.html | |
$image_resource->writeImage( $newfilename ); | |
*/ | |
//unlink( $filename ); | |
//delete original image altogether ---> you might want to update the post meta on this '_wp_attached_file' , you can actually get the attachment id from the filter, i have added it above. It would be best to have a actual image url in there! something like $sfile= str_replace($upload_dir['basedir'],'', $newfilename); update_post_meta($id, '_wp_attached_file', $sfile ); | |
switch($extension){ | |
case '.jpg': | |
case '.jpeg': | |
$type = 'image/jpeg'; | |
break; | |
case '.gif': | |
$type = 'image/gif'; | |
break; | |
case '.png': | |
$type = 'image/png'; | |
break; | |
default: | |
$type = 'image/jpeg'; | |
break; | |
} | |
$metadata['sizes']['background-image-blurred']= array( | |
"file"=> $newfilename, | |
"width"=> 1920, | |
"height"=> 1080, | |
"mime-type"=> $type | |
); | |
return $metadata; | |
} | |
add_filter('wp_generate_attachment_metadata', 'force_add_size', 100, 2); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment