J'essaie de lancer une petite fonction pour déterminer la luminance d'une image et la stocker dans le postmeta pour cette image.
J'ai la fonction qui fonctionne, mais je l'aime bien se déclencher lorsqu'une image est terminée. Quelqu'un connaît-il la fonction/le filtre/l'action à laquelle je devrais m'attacher pour cela?
ive regardé
et je ne peux pas sembler faire l'un d'eux simplement exécuter un ajout à la table de postmeta pour l'image
actuellement mon code ressemble à quelque chose comme:
function insert_luminance_data($post, $attachment) {
if ( substr($post['post_mime_type'], 0, 5) == 'image' ) {
$lum = 'TEST';
add_post_meta( $post['ID'], 'image_lum', $lum, true ) || update_post_meta( $post['ID'], 'image_lum', $lum );
}
return $post;
}
add_filter('image_attachment_fields_to_save', 'insert_luminance_data', 10, 2);
mais cela ne fonctionne pas.
Merci d'avance pour toute aide
SOLUTIONMerci à s_ha_dum
function get_avg_luminance($filename, $num_samples=10) {
$img = imagecreatefromjpeg($filename);
$width = imagesx($img);
$height = imagesy($img);
$x_step = intval($width/$num_samples);
$y_step = intval($height/$num_samples);
$total_lum = 0;
$sample_no = 1;
for ($x=0; $x<$width; $x+=$x_step) {
for ($y=0; $y<$height; $y+=$y_step) {
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// choose a simple luminance formula from here
// http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
$lum = ($r+$r+$b+$g+$g+$g)/6;
$total_lum += $lum;
$sample_no++;
}
}
// work out the average
$avg_lum = $total_lum/$sample_no;
return $avg_lum;
// assume a medium gray is the threshold, #acacac or RGB(172, 172, 172)
// this equates to a luminance of 170
}
function insert_luminance_data($post_ID) {
$src = wp_get_attachment_image_src( $post_ID, 'large' )[0];
$lum = get_avg_luminance($src, 10, true);
add_post_meta( $post_ID, 'image_lum', $lum, true ) || update_post_meta( $post_ID, 'image_lum', $lum );
return $post_ID;
}
add_filter('add_attachment', 'insert_luminance_data', 10, 2);
cela crée un nombre compris entre 0 et 255 qui représente la luminance de l'image. Cette option est particulièrement utile si vous superposez du texte sur une image d'arrière-plan et souhaitez savoir si l'image est principalement claire ou sombre.
La gestion des médias de WordPress me semble dispersée et incohérente. Je dis cela seulement pour dire que je ne peux pas promettre que cela fonctionnera dans tous les cas. Cependant, je pense que j'utiliserais le crochet add_attachment
DE wp_insert_attachment
.
Vous obtiendrez une identification de poste, il vous faudra donc ...
wp_get_attachment_imge_src
, probablement,