Làm thế nào để thay đổi loại hình ảnh cho kích thước cụ thể?


8

Tôi đang tối ưu hóa một trang web với số lượng lớn (hàng chục) hình ảnh trên trang trong một lưới. Để hỗ trợ võng mạc, hình ảnh cũng cần phải có kích thước gấp 2 lần.

Trái cây treo thấp là để đảm bảo kích thước hình thu nhỏ được tải (vẫn rộng đáng kể 520px vì võng mạc) thay vì kích thước ban đầu đầy đủ.

Tuy nhiên hầu như tất cả các hình ảnh được lưu trong PNG. Đó là một sự lãng phí rất lớn đối với hình ảnh chụp ảnh. Sẽ có ý nghĩa đối với các hình thu nhỏ được tạo thành JPG ... Ngoại trừ việc dường như không có cách nào để làm điều đó.

Nhìn từ mã lõi có vẻ gần nhất WP_Image_Editor->get_output_format()nhưng có vẻ không thân thiện để dễ dàng điều chỉnh và nhắm mục tiêu kích thước cụ thể.

Có bất kỳ điểm nào khác trong mã mà tôi có thể cố gắng thay đổi loại hình ảnh được tạo không?

Câu trả lời:


10

Bạn có thể sử dụng wp_generate_attachment_metadatabộ lọc:

function wpse_183835_to_jpeg( $meta, $post_id ) {
    $sizes_to_convert = array(
        'thumbnail',
    );

    $path = dirname( get_attached_file( $post_id ) );

    foreach ( $sizes_to_convert as $size ) {
        if ( ! empty( $meta['sizes'][ $size ] ) ) {
            $data = $meta['sizes'][ $size ];
            if ( $data['mime-type'] === 'image/png' && is_file( $file = "$path/{$data['file']}" ) ) {
                if ( $image =@ imagecreatefrompng( $file ) ) {
                    // Change file extension
                    $file_jpg = preg_replace( '/\.[^\.]+$/', '', $data['file'] ) . '.jpg';

                    if ( @ imagejpeg( $image, "$path/$file_jpg", 90 ) ) { // Save new jpg version
                        // Update metadata with new filename
                        $meta['sizes'][ $size ]['file'] = $file_jpg;
                        // Delete png version
                        @ unlink( $file );
                    }

                    @ imagedestroy( $image );
                }
            }
        }
    }

    return $meta;
}

add_filter( 'wp_generate_attachment_metadata', 'wpse_183835_to_jpeg', 10, 2 );

https://codex.wordpress.org/Function_Reference/wp_generate_attachment_metadata


1
Vàng! Bây giờ tôi đã nhìn vào nó, tôi thực sự đã nhớ kỹ thuật xử lý hình ảnh này sau khi chúng được tạo ra. :) Đã thử nghiệm và làm việc, cảm ơn bạn.
Hiếm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.