it-swarm.com.de

Stellen Sie die JPEG-Komprimierung für bestimmte benutzerdefinierte Bildgrößen ein

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.

8
Amanda Duke

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 .

9
Ahmad M