Итак, я следую примеру приведенному здесь (который я изменил, чтобы размыть, без водяного знака), чтобы сделать размытое изображение в WordPress при загрузке. Проблема заключается в том, что если загруженный файл имеет тот же размер или меньше, чем установленный размер, тогда WordPress не будет генерировать изображение, и, следовательно, не будет размытого изображения.
Я попытался использовать isst($meta['sizes']['background-image-blurred']['file'])
, чтобы определить, был ли он создан, а если нет, то copy()
исходный файл, но тогда для изображения не будет создано метаданных WordPress (для людей, не являющихся членами WordPress, метаданные отличается от того, что вы думаете), поэтому при отображении с помощью wp_get_attachment_image
проблемы будут задаваться проблемы с высотой/шириной undefined.
Итак, я убежден, что использование wp_get_attachment_image
hook, как показано ниже, возможно, неверный способ сделать это. Вероятно, это должно произойти раньше в процессе загрузки изображений.
Любые идеи о том, как лучше всего это сделать?
/**
* 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
$filename = $meta['sizes']['background-image-blurred']['file'];
$meta['sizes']['background-image-blurred']['file'] = blur_image( $filename, $upload_dir );
return $meta;
}
add_filter( 'wp_generate_attachment_metadata', 'generate_blurred_image' );
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 been blurred
unlink( $original_image_path );
return $new_filename;
}