Các 'jpeg_quality'
hàm hook của bộ lọc chấp nhận hai đối số: $jpeg_quality
và $function
đó là hàm từ bên trong hook của bộ lọc được kích hoạt và có thể là image_resize
hoặc wp_crop_image
. Vì vậy, không có cách nào để chọn lọc chất lượng .jpeg
hình ảnh theo kích thước hình ảnh từ chức năng móc lọc này.
Tuy nhiên, bạn vẫn có thể móc vào một hook hành động sau này trong quá trình tải lên tệp đính kèm và điều chỉnh .jpeg
chất lượng hình ảnh của hình ảnh được tải lên tại thời điểm đó theo kích thước cụ thể phù hợp hơn với nhu cầu của bạn. Trước tiên, đặt jpeg_quality
mức tối đa để duy trì chất lượng hình ảnh gốc, sau đó móc vào added_post_meta
hook hành động (được bắn vào cuối khi chèn siêu dữ liệu đính kèm`) để điều chỉnh chất lượng, như sau:
// 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);
}
}
}
}
Đoạn mã trên sẽ chỉ ảnh hưởng đến những hình ảnh mới được tải lên. Nếu bạn muốn cập nhật chất lượng của hình ảnh được tải lên trước đó, bạn có thể sử dụng register_activation_hook
các plugin. Tạo một tệp php mới trong wp-content/plugins
thư mục và đặt tên nó là bất cứ thứ gì bạn thích ( update-jpeg-quality.php
ví dụ) và thêm đoạn mã sau vào nó:
<?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);
}
}
}
?>
Bây giờ truy cập trang Plugins của bạn và nhấn activate
của Update JPEG Quality
plugin. Điều này sẽ lặp qua tất cả các .jpeg
hình ảnh được tải lên trước đó của bạn và điều chỉnh chất lượng của chúng theo các giá trị và điều kiện bạn chỉ định trong plugin. Sau đó, bạn có thể hủy kích hoạt và xóa plugin này một cách an toàn. Vui lòng kiểm tra môi trường thử nghiệm trước khi áp dụng cho trang web sản xuất .