Skip to content

Instantly share code, notes, and snippets.

@drewbaker
Created January 29, 2016 18:24
Show Gist options
  • Select an option

  • Save drewbaker/6cbfdaff1489b7990d04 to your computer and use it in GitHub Desktop.

Select an option

Save drewbaker/6cbfdaff1489b7990d04 to your computer and use it in GitHub Desktop.

Revisions

  1. drewbaker created this gist Jan 29, 2016.
    99 changes: 99 additions & 0 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,99 @@
    /**
    * 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);