Saya menggunakan filter skala abu-abu pada semua gambar yang diunggah di instalasi WordPress saya. Namun saya ingin baik gambar skala abu-abu dan gambar berwarna di situs web saya (diwarnai pada hover). Cara saya mencoba melakukan ini adalah dengan membuat sekelompok add_image_size () seperti:
add_image_size( 'gho-small', 100, 0, true ); // Used for small images
add_image_size( 'gho-small-grayscale', 100, 0, true ); // Used for small grayscaled images
add_image_size( 'gho-medium', 200, 0, true ); // Used for medium images
add_image_size( 'gho-medium-grayscale', 200, 0, true ); // Used for medium grayscaled images
add_image_size( 'gho-large', 400, 0, true ); // Used for large images
add_image_size( 'gho-large-grayscale', 400, 0, true ); // Used for large grayscaled images
Dan kemudian saya akan melakukan filter pada gambar dan hanya mengambil ID * -labu-abu dan menyimpannya:
add_filter('wp_generate_attachment_metadata','gholumns_grayscale_filter');
function gholumns_grayscale_filter($meta)
{
$dir = wp_upload_dir();
$file = trailingslashit($dir['path']).$meta['sizes']['gho-large-grayscale']['file'];
do_grayscale_filter($file);
return $meta;
}
Ini akan berfungsi dengan baik, tetapi tampaknya add_image_size () terlihat pada argumen lebar dan tinggi dan ketika ukuran sudah ditentukan dengan kombinasi itu, ukurannya tidak ditambahkan. Saya dapat mengerti bahwa, karena fungsinya adalah untuk menambahkan ukuran baru, dan jika ukurannya adalah duplikat, biasanya lebih baik tidak menambahkannya lagi untuk menghemat waktu pemrosesan. Tapi sekarang saya ingin dua gambar dengan ukuran yang sama, tetapi satu dengan filter diterapkan padanya dan yang lain asli.
Bagaimana saya bisa mencapai ini?
Saya telah mencoba menambahkan ukuran lain yang hanya satu piksel lebih lebar, seperti:
add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images
Dan kemudian mengubah ukuran gambar nanti setelah filter kembali ke 100/200/400
apa pun. Tapi itu tidak terasa benar, dan itu juga mengacaukan get_the_post_thumbnail()
panggilan karena orang masih berpikir dimensi gambar 101x$height
. Ini juga tidak sesederhana mengubah ukuran gambar kembali satu piksel secara horizontal dan vertikal karena rasio dapat menyebabkan tingginya > 1px
lebih tinggi ketika Anda memiliki lebar + 1px.
sumber
Jawaban:
Astaga, saya terus memecahkan masalah saya sendiri sepanjang waktu. Inilah cara saya menyelesaikannya pada akhirnya. Saya menemukan bahwa add_image_size tidak mengabaikan dimensi identik ukuran gambar, tetapi mengarahkan nama file ke file yang sama di direktori unggahan. Setelah saya tahu itu, saya bisa menyimpan gambar skala abu-abu dengan nama yang berbeda, mengembalikan nama itu ke $ meta array di hook saya, dan WP menganggap itu sebagai informasi untuk disimpan dalam database. Semua fungsi get_thumbnail () masih berfungsi sebagaimana mestinya dan saya hanya bisa meminta ID skala abu-abu.
sumber