WP_GET_IMAGE_EDITOR在Foreach循环中调整图像大小

时间:2019-11-07 作者:Simon

我正在从上传的图像文件生成化身。运行该函数时,WordPress会创建第一个图像image-32x32.gif 但在循环的其余部分失败。我怀疑这是由于并发性。

public function process_uploaded_file($file)
  {
    $editor = wp_get_image_editor($file);
    $sizes = [32, 64, 128, 256, 512];
    foreach ($sizes as $size) {
      $result = $editor->resize($size, $size, true);  //LINE 217
      if (!is_wp_error($result)) {
        $editor->save($editor->generate_filename());
      }
    }
  }
我做错了什么?

Fatal error: Uncaught Error: Call to undefined method WP_Error::resize() in /Users/.../class-gf-avatar-field.php on line 217
( ! ) Error: Call to undefined method WP_Error::resize() in /.../class-gf-avatar-field.php on line 217
Update 09-11-2019我添加了一些检查,每次都创建一个新编辑器。

foreach ($sizes as $size) {
    $editor = wp_get_image_editor($file);
    if (!is_wp_error($editor)) {
      $result = $editor->resize($size, $size, true);
    if (!is_wp_error($result)) {
      $editor->save($editor->generate_filename());
    }
  }
}

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

wp_get_image_editor 可以返回WP_Error 对象,它似乎是代码中发生的事情。代码从不检查这一点,而是尝试调整图像大小,认为它正在调用resize 在图像编辑对象上。

您需要进行2次调整:

检查是否$editor 是一个WP_Error 对象添加代码以打印错误对象消息,这样您就可以知道错误是什么,但最后,还有一个您尚未遇到的错误,它将随着您调整大小而出现。考虑以下因素:

我们加载文件。png进入内存,它是512x512,我们现在将内存中的图像从512调整为32,我们保存32x32图像,我们现在将内存中的32x32图像调整为64x64,我们保存64x64图像,将内存中的64图像调整为128,等等所有调整大小的图像都将是32x32的升级版本,而不是原始版本。

此外,考虑到resize 可能两者都不会返回true 或错误对象,但false

相关推荐

为edit.php页面上的自定义帖子类型字段添加列和帖子过滤器

我有一个插件,它创建了一个自定义帖子类型,该类型有一个使用插件生成的自定义字段。自定义字段作为一个称为status. 此元键的值为“打开”或“关闭”。在“编辑”上。php页面列出了帖子,我想在一列中显示状态字段的内容。我还想添加一个过滤器,允许管理员在默认情况下显示所有帖子,并使用过滤器选择器仅查看“打开”和“关闭”帖子。