我正在从上传的图像文件生成化身。运行该函数时,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());
}
}
}
最合适的回答,由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