挂钩到已完成的图像上传过滤器

时间:2013-10-08 作者:haxxxton

我正在尝试运行一个小函数来确定图像的亮度,并将其存储在该图像的后期。。

我有功能工作,但我希望它的火灾时,图像已完成上传。。有人知道我应该为这个连接的函数/过滤器/操作吗?

我看过

图像\\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之间的数字,表示图像的亮度。。如果要在背景图像上分层文本,并希望知道图像主要是浅色还是深色,则此选项特别有用。

    1 个回复
    最合适的回答,由SO网友:s_ha_dum 整理而成

    WordPress的媒体处理方式让我觉得分散且不一致。我这么说只是想说,我不能保证这在所有情况下都能奏效。然而,我想我会使用add_attachment hook from wp_insert_attachment.

    你会得到一个帖子ID,所以你必须。。。

    使用检索图像srcwp_get_attachment_imge_src,可能需要检索图像本身并对其进行处理(不确定您打算如何处理),然后保存额外的数据

    结束

    相关推荐

    Adding Relevant Post Images

    我想在每个帖子页面的末尾添加相关帖子with an image 在我新创建的网站中http://www.techberita.com但作为一个初学者,这对我来说是一个很大的问题,因为我不能做到这一点,因为我对PHP和wordpress没有太多的知识。我搜索了一些插件,但没有找到一个好的插件。我希望很快得到答复。最好使用php代码。