wordpress - WordPress:始终为自定义图像大小创建图像,即使上传的图像小于自定义大小
问题描述
我想在 WordPress 中生成额外的图像大小。WP 让你可以add_image_size
这样使用:
// Make sure featured images are enabled
add_theme_support( 'post-thumbnails' );
// Add featured image sizes
add_image_size( 'original-img', 2000, 99999 );
如果图像有最小值。宽度为 2000px,将生成图像大小。但是,如果图像较小,则不会生成自定义尺寸。
无论上传的图像大小如何,是否有任何选项可以每次创建自定义图像大小的图像?或者也许可以额外保存原始图像?
解释我为什么要实现:我需要在我的图像上添加水印,但还需要没有水印的原始图像(或非常大的图像)。
我也尝试使用“大”图像,但这里同样的问题。通过上传小于 1024 像素的图像,将不会创建图像大小。
解决方案
wp_generate_attachment_metadata
如果尚未创建上传的图像,您可以在那里挂接并复制上传的图像。我在下面包含了执行此操作的代码。
将此添加到您的functions.php。每个步骤都被注释以解释它的作用,但基本上是在上传过程中:
- 我们检查 WP 是否创建了您的自定义尺寸
- 如果是,什么都不做
- 否则创建一个名为 imagename-WxH.extn 的图像副本(egif 上传的图像是 cat.jpg 并且是 700x520px,我们的副本将被调用
cat-700x520px.jpg
) - 将复制的图像添加为您的自定义尺寸
original-img
然后你可以original-img
在你的代码中使用你的自定义尺寸并且总是有一个图像。
// Make sure featured images are enabled
add_theme_support( 'post-thumbnails' );
// Add featured image sizes
add_image_size( 'original-img', 2000, 99999 );
// Hook into the upload process
add_filter('wp_generate_attachment_metadata','copy_original_img');
// Check if the original image was added, if not make a copy and add it as original-img
function copy_original_img($image_data) {
// if the original-img was created, we don't need to do anything
if (isset($image_data['sizes']['original-img']))
return;
// 1. make a copy of the uploaded image to use for original-img
$upload_dir = wp_upload_dir();
$uploaded_img = $image_data['file'];
$img_w = $image_data['width'];
$img_h = $image_data['height'];
// construct the filename for the copy in the format: imagename-WxH.extn
$path_parts = pathinfo($uploaded_img);
$new_img = $path_parts['filename']."-".$img_w."x".$img_h.".".$path_parts['extension'];
// make a copy of the image
$img_to_copy = $upload_dir['path'] . '/'.$uploaded_img;
$new_img_path = $upload_dir['path'] . '/'.$new_img;
$success = copy($img_to_copy,$new_img_path);
// 2. If the image was copied successfully, add it into the image_data to be returned:
if ($success){
$image_data['sizes']['original-img']['file'] = $new_img;
$image_data['sizes']['original-img']['width'] = $img_w ; // same as uploaded width
$image_data['sizes']['original-img']['height'] = $img_h; // same as uploaded height
$image_data['sizes']['original-img']['mime-type'] = mime_content_type($new_img_path);
}
return $image_data;
}
推荐阅读
- angular - 为什么nativescript 如此频繁地使用NO_ERRORS_SCHEMA?
- python - 如何在 Python 或命令行中将 midi type 1 文件转换为 midi type 0?
- java - 在 jpa 中保持一对多关系
- css - Bootstrap Mobile Toggle 在 Django 中不起作用
- java - 是所有节点的子节点数相等还是0
- javascript - 生成列表模板后,当我们将模板放入 eBay 时 - 我们可以看到不必要的新行 - 如何通过 java-script 解决?
- php - 如何在现有的 JSON 数组中推送单个元素?
- rest - 使用 gorms 和 many2many 创建
- r - 无法在 R 中使用 cast 命令对数字列名进行排序
- javascript - todatestring 开头没有日期的名称