Schärfe Bildkonvolution für bestimmte Größen

Wie kann ich einen Schärfefilter (Bildkonvolution) nur einigen der verschiedenen Größen von Bildern hinzufügen, die WordPress erzeugt (das “Thumbnail” und vielleicht auch das “Medium”)?

Wenn WordPress die kleineren Bilder erzeugt, wird das Thumbnail besonders unscharf. Ich arbeite daran, das folgende hervorragende Skript von Ünsal Korkmaz zu verwenden, um das Schärfen anzuwenden, aber ich möchte, dass es nur für eine oder zwei Größen gilt.

Könnte das geändert werden – vielleicht mit einer if-statement um die Imageconvolution-function – um zu tun, was ich will?

function ajx_sharpen_resized_files( $resized_file ) { $image = wp_load_image( $resized_file ); if ( !is_resource( $image ) ) return new WP_Error( 'error_loading_image', $image, $file ); $size = @getimagesize( $resized_file ); if ( !$size ) return new WP_Error('invalid_image', __('Could not read image size'), $file); list($orig_w, $orig_h, $orig_type) = $size; switch ( $orig_type ) { case IMAGETYPE_JPEG: $matrix = array( array(-1, -1, -1), array(-1, 20, -1), array(-1, -1, -1), ); $divisor = array_sum(array_map('array_sum', $matrix)); $offset = 0; imageconvolution($image, $matrix, $divisor, $offset); imagejpeg($image, $resized_file, apply_filters( 'jpeg_quality', 80, 'edit_image' )); break; case IMAGETYPE_PNG: return $resized_file; case IMAGETYPE_GIF: return $resized_file; } return $resized_file; } add_filter('image_make_intermediate_size', 'ajx_sharpen_resized_files',900); 

Sein Skript finden Sie hier: Beste Sammlung von Code für Ihre functions.php Datei

und in diesem WordPress-Plugin hier: https://wordpress.org/plugins/sharpen-resized-images/

Zuvor hatte ich versucht, ein anderes Skript (von Ahmad M ) zu verwenden, um die Komprimierungsstufe für jede Größe individuell zu ändern. Es wird zu einer anderen Zeit angewendet. Vielleicht ist das die, die ich verwenden und ändern muss? Ich habe versucht, die Bildkonvolution-function hier hinzuzufügen, aber ohne Erfolg; Vielleicht stelle ich es an die falsche Stelle? Oder feuert dieses Skript zu spät, um effektiv zu sein?

Wenn ich das versuchte, trat das Schärfen nicht auf:

 /** * Change WordPress compression of different image sizes. * See: https://wordpress.stackexchange.com/questions/74103/set-jpeg-compression-for-specific-custom-image-sizes */ /** Set the quality to maximum, * instead of WordPress default compression rate. */ add_filter('jpeg_quality', create_function('$quality', 'return 100;')); /** action hook to return quality per image size */ add_action('added_post_meta', 'fs_update_jpeg_quality', 10, 4); function fs_update_jpeg_quality($meta_id, $attach_id, $meta_key, $attach_meta) { if ($meta_key == '_wp_attachment_metadata') { $post = get_post($attach_id); if ($post->post_mime_type == 'image/jpeg' && is_array($attach_meta['sizes'])) { $pathinfo = pathinfo($attach_meta['file']); $uploads = wp_upload_dir(); $dir = $uploads['basedir'] . '/' . $pathinfo['dirname']; // sharpening filter for thumbnail // see: http://php.net/manual/en/function.imageconvolution.php#104006 $sharpenMatrix = array ( array(-1.2, -1, -1.2), array(-1, 20, -1), array(-1.2, -1, -1.2) ); // calculate the sharpen divisor $divisor = array_sum(array_map('array_sum', $sharpenMatrix)); $offset = 0; // this illustrates how to apply the filter: // imageconvolution($img, $sharpenMatrix, $divisor, $offset); foreach ($attach_meta['sizes'] as $size => $value) { $image = $dir . '/' . $value['file']; $resource = imagecreatefromjpeg($image); if ($size == 'large') { // set the jpeg quality for 'large' size imagejpeg($resource, $image, 84); } elseif ($size == 'medium_large') { // set the jpeg quality for the 'medium_large' size imagejpeg($resource, $image, 84); } elseif ($size == 'medium') { // set the jpeg quality for the 'medium' size imagejpeg($resource, $image, 84); } elseif ($size == 'thumbnail') { $sharp_thumbnail = imageconvolution($image, $sharpenMatrix, $divisor, $offset); // set the jpeg quality for the 'thumbnail' size imagejpeg($sharp_thumbnail, $image, 84); } else { // set the jpeg quality for the rest of sizes imagejpeg($resource, $image, 84); } // or you can skip a particular image size // and set the quality for the rest: // if ($size == 'splash') continue; imagedestroy($resource); } } } } 

Irgendwelche Vorschläge oder völlig unterschiedliche Ansätze, geschätzt!

Solutions Collecting From Web of "Schärfe Bildkonvolution für bestimmte Größen"