Ich verwende einen Graustufenfilter für alle hochgeladenen Bilder in meiner WordPress-Installation. Ich möchte jedoch sowohl das grau skalierte Bild als auch das farbige Bild auf meiner Website (farbig beim Schweben). Ich habe versucht, dies zu tun, indem ich eine Reihe von add_image_size () wie folgt erstellt habe:
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
Und dann würde ich einen Filter für die Bilder machen und nur die * -grayscale-IDs nehmen und sie speichern:
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;
}
Es würde gut funktionieren, aber anscheinend betrachtet add_image_size () die Argumente width und height und wenn eine Größe bereits mit dieser Kombination definiert ist, wird die Größe nicht hinzugefügt. Ich kann das verstehen, da die Funktion darin besteht, neue Größen hinzuzufügen, und wenn die Größe ein Duplikat ist, ist es normalerweise besser, sie nicht erneut hinzuzufügen, um Verarbeitungszeit zu sparen. Aber jetzt möchte ich zwei Bilder mit der gleichen Größe, aber eines mit einem Filter und das andere mit dem Original.
Wie kann ich das erreichen?
Ich habe versucht, eine andere Größe hinzuzufügen, die nur ein Pixel breiter ist, wie:
add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images
Und dann ändern Sie die Größe des Bildes später nach dem Filter wieder auf 100/200/400
was auch immer. Aber es fühlt sich nicht richtig an und es bringt auch get_the_post_thumbnail()
Anrufe durcheinander, da man immer noch denkt, dass die Bilddimension ist 101x$height
. Es ist auch nicht so einfach, das Bild horizontal und vertikal um ein Pixel zu > 1px
verkleinern, da Verhältnisse dazu führen können, dass die Höhe höher ist, wenn Sie eine Breite + 1 Pixel haben.