Ich verwende verschiedene benutzerdefinierte Bildgrößen (nach add_image_size
) und habe die JPEG-Komprimierung mit diesem Filter auf 30% eingestellt:
function jpeg_quality_callback($arg) {
return (int)30;
}
add_filter('jpeg_quality', 'jpeg_quality_callback');
Wenn ich mich nicht irre, komprimiert der obige Code alle meiner benutzerdefinierten Bildgrößen mit 30%. Jetzt möchte ich für zwei meiner benutzerdefinierten Bildgrößen mit den Namen splash1
und splash2
die Komprimierung auf 80% einstellen. Wie ist das möglich?
Alternativ können Sie diese Bildgrößen vom 30% -Komprimierungsfilter ausschließen.
Die Filter-Hook-Funktionen 'jpeg_quality'
akzeptieren zwei Argumente: $jpeg_quality
und $function
, die die Funktion innerhalb des Filter-Hooks darstellen, werden ausgelöst und können entweder image_resize
oder wp_crop_image
sein. Mit dieser Filter-Hook-Funktion kann die Qualität von .jpeg
-Bildern nicht selektiv entsprechend der Bildgröße eingestellt werden.
Sie können sich jedoch beim Hochladen von Anhängen immer noch an einen späteren Aktions-Hook binden und die .jpeg
-Bildqualität der hochgeladenen Bilder an diesem Punkt entsprechend ihrer spezifischen Größe an Ihre Bedürfnisse anpassen. Stellen Sie zuerst den jpeg_quality
auf das Maximum ein, um die ursprüngliche Bildqualität beizubehalten, und aktivieren Sie dann den added_post_meta
-Aktionshook (der am Ende des Einfügens von Anhang-Metadaten ausgelöst wird), um die Qualität wie folgt anzupassen:
// 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);
}
}
}
}
Der obige Code wirkt sich nur auf die neu hochgeladenen Bilder aus. Wenn Sie die Qualität zuvor hochgeladener Bilder aktualisieren möchten, können Sie den register_activation_hook
der Plugins verwenden. Erstellen Sie eine neue PHP-Datei im Verzeichnis wp-content/plugins
und benennen Sie sie nach Belieben (zum Beispiel update-jpeg-quality.php
). Fügen Sie den folgenden Code hinzu:
<?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);
}
}
}
?>
Besuchen Sie jetzt Ihre Plugins-Seite und klicken Sie auf activate
des Update JPEG Quality
-Plugins. Dies durchläuft alle Ihre zuvor hochgeladenen .jpeg
-Bilder und passt deren Qualität gemäß den im Plugin angegebenen Werten und Bedingungen an. Dann können Sie dieses Plugin sicher deaktivieren und löschen. Bitte testen Sie zuerst die Testumgebung, bevor Sie sich an den Produktionsstandort wenden .