我正在尝试运行一个小函数来确定图像的亮度,并将其存储在该图像的后期。。
我有功能工作,但我希望它的火灾时,图像已完成上传。。有人知道我应该为这个连接的函数/过滤器/操作吗?
我看过
图像\\u附件\\u字段\\u to\\u保存
附件\\u字段\\u to\\u保存wp\\u句柄\\u上载媒体\\u上载表单\\u处理程序wp\\u生成附件\\u元数据
,我似乎无法让它们中的任何一个简单地对图像的Posteta表进行添加当前我的代码类似于:
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);
但这不起作用。
提前感谢您的帮助
<小时>SOLUTION 感谢s\\u ha\\u 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);
这将创建一个介于0和255之间的数字,表示图像的亮度。。如果要在背景图像上分层文本,并希望知道图像主要是浅色还是深色,则此选项特别有用。