Las 'jpeg_quality'funciones de enlace de filtro aceptan dos argumentos: $jpeg_qualityy $functioncuál es la función desde dentro del enlace de filtro se activa y puede ser image_resizeo wp_crop_image. Por lo tanto, no hay forma de establecer selectivamente la calidad de las .jpegimágenes de acuerdo con el tamaño de la imagen desde esta función de enlace de filtro.
Sin embargo, aún puede engancharse a un gancho de acción posterior en el proceso de carga de archivos adjuntos y ajustar la .jpegcalidad de imagen de las imágenes cargadas en ese punto de acuerdo con su tamaño específico para satisfacer sus necesidades. Primero configure jpeg_qualityal máximo para preservar la calidad de imagen original, luego enganche a gancho de added_post_metaacción (que se activa al final de insertar los metadatos del archivo adjunto ') para ajustar la calidad, de la siguiente manera:
// set the quality to maximum
add_filter('jpeg_quality', create_function('$quality', 'return 100;'));
add_action('added_post_meta', 'ad_update_jpeg_quality', 10, 4);
function ad_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'];
foreach ($attach_meta['sizes'] as $size => $value) {
$image = $dir . '/' . $value['file'];
$resource = imagecreatefromjpeg($image);
if ($size == 'spalsh') {
// set the jpeg quality for 'spalsh' size
imagejpeg($resource, $image, 100);
} elseif ($size == 'spalsh1') {
// set the jpeg quality for the 'splash1' size
imagejpeg($resource, $image, 30);
} else {
// set the jpeg quality for the rest of sizes
imagejpeg($resource, $image, 10);
}
// or you can skip a paticular image size
// and set the quality for the rest:
// if ($size == 'splash') continue;
imagedestroy($resource);
}
}
}
}
El código anterior afectará solo a las imágenes recién cargadas. Si desea actualizar la calidad de las imágenes cargadas previamente, puede utilizar register_activation_hookcomplementos. Cree un nuevo archivo php en el wp-content/pluginsdirectorio y asígnele el nombre que desee ( update-jpeg-quality.phppor ejemplo) y agregue el siguiente código:
<?php
/*
Plugin Name: Update JPEG Quality
Plugin URI: http://wordpress.stackexchange.com/questions/74103/set-jpeg-compression-for-specific-custom-image-sizes
Description: This plugin will change the jpeg image quality according to its size.
Author: Ahmad M
Version: 1.0
Author URI: http://wordpress.stackexchange.com/users/12961/ahmad-m
*/
register_activation_hook(__FILE__, 'ad_modify_jpeg_quality');
function ad_modify_jpeg_quality() {
$attachments = get_posts(array(
'numberposts' => -1,
'post_type' => 'attachment',
'post_mime_type' => 'image/jpeg'
));
if (empty($attachments)) return;
$uploads = wp_upload_dir();
foreach ($attachments as $attachment) {
$attach_meta = wp_get_attachment_metadata($attachment->ID);
if (!is_array($attach_meta['sizes'])) break;
$pathinfo = pathinfo($attach_meta['file']);
$dir = $uploads['basedir'] . '/' . $pathinfo['dirname'];
foreach ($attach_meta['sizes'] as $size => $value) {
$image = $dir . '/' . $value['file'];
$resource = imagecreatefromjpeg($image);
if ($size == 'spalsh') {
// set the jpeg quality for 'spalsh' size
imagejpeg($resource, $image, 100);
} elseif ($size == 'spalsh1') {
// set the jpeg quality for the 'splash1' size
imagejpeg($resource, $image, 30);
} else {
// set the jpeg quality for the rest of sizes
imagejpeg($resource, $image, 10);
}
imagedestroy($resource);
}
}
}
?>
Ahora visite su página de Complementos y presione activateel Update JPEG Qualitycomplemento. Esto recorrerá todas sus .jpegimágenes cargadas previamente y ajustará su calidad de acuerdo con los valores y condiciones que especifique en el complemento. Luego puede desactivar y eliminar este complemento de forma segura. Pruebe primero el entorno de prueba antes de aplicar al sitio de producción .