wp_save_image_file()
云策文档标注
概述
wp_save_image_file() 函数用于将图像保存到文件,支持 WP_Image_Editor 实例和已弃用的图像资源类型。它处理不同 MIME 类型的图像保存,并包含过滤器以允许自定义保存行为。
关键要点
- 函数接受四个参数:$filename(文件名)、$image(图像编辑器实例或资源)、$mime_type(MIME 类型)和 $post_id(附件文章 ID)。
- 返回类型为数组(成功时包含路径、文件名、宽度、高度、MIME 类型和文件大小)、WP_Error 或布尔值(对于已弃用参数)。
- 使用 WP_Image_Editor 实例时,通过 'image_editor_save_pre' 和 'wp_save_image_editor_file' 过滤器进行钩子处理。
- 对于已弃用的 $image 参数(如资源或 GdImage),函数会发出弃用警告并使用 'image_save_pre' 和 'wp_save_image_file' 过滤器。
- 支持多种图像格式(如 JPEG、PNG、GIF、WebP、AVIF),并根据 MIME 类型调用相应的 PHP 图像函数。
代码示例
function wp_save_image_file( $filename, $image, $mime_type, $post_id ) {
if ( $image instanceof WP_Image_Editor ) {
$image = apply_filters( 'image_editor_save_pre', $image, $post_id );
$saved = apply_filters( 'wp_save_image_editor_file', null, $filename, $image, $mime_type, $post_id );
if ( null !== $saved ) {
return $saved;
}
return $image->save( $filename, $mime_type );
} else {
_deprecated_argument( __FUNCTION__, '3.5.0', sprintf( __( '%1$s needs to be a %2$s object.' ), '$image', 'WP_Image_Editor' ) );
$image = apply_filters_deprecated( 'image_save_pre', array( $image, $post_id ), '3.5.0', 'image_editor_save_pre' );
$saved = apply_filters_deprecated(
'wp_save_image_file',
array( null, $filename, $image, $mime_type, $post_id ),
'3.5.0',
'wp_save_image_editor_file'
);
if ( null !== $saved ) {
return $saved;
}
switch ( $mime_type ) {
case 'image/jpeg':
return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
case 'image/png':
return imagepng( $image, $filename );
case 'image/gif':
return imagegif( $image, $filename );
case 'image/webp':
if ( function_exists( 'imagewebp' ) ) {
return imagewebp( $image, $filename );
}
return false;
case 'image/avif':
if ( function_exists( 'imageavif' ) ) {
return imageavif( $image, $filename );
}
return false;
default:
return false;
}
}
}注意事项
- 从 WordPress 3.5.0 开始,$image 参数应使用 WP_Image_Editor 实例,旧类型已弃用。
- 函数返回的数组在 WordPress 6.0.0 中新增了 $filesize 字段。
- 使用过滤器时,返回非 null 值可以跳过默认保存逻辑。
原文内容
Saves image to file.
Parameters
$filenamestringrequired-
Name of the file to be saved.
$imageWP_Image_Editorrequired-
The image editor instance.
$mime_typestringrequired-
The mime type of the image.
$post_idintrequired-
Attachment post ID.
Source
function wp_save_image_file( $filename, $image, $mime_type, $post_id ) {
if ( $image instanceof WP_Image_Editor ) {
/** This filter is documented in wp-admin/includes/image-edit.php */
$image = apply_filters( 'image_editor_save_pre', $image, $post_id );
/**
* Filters whether to skip saving the image file.
*
* Returning a non-null value will short-circuit the save method,
* returning that value instead.
*
* @since 3.5.0
*
* @param bool|null $override Value to return instead of saving. Default null.
* @param string $filename Name of the file to be saved.
* @param WP_Image_Editor $image The image editor instance.
* @param string $mime_type The mime type of the image.
* @param int $post_id Attachment post ID.
*/
$saved = apply_filters( 'wp_save_image_editor_file', null, $filename, $image, $mime_type, $post_id );
if ( null !== $saved ) {
return $saved;
}
return $image->save( $filename, $mime_type );
} else {
/* translators: 1: $image, 2: WP_Image_Editor */
_deprecated_argument( __FUNCTION__, '3.5.0', sprintf( __( '%1$s needs to be a %2$s object.' ), '$image', 'WP_Image_Editor' ) );
/** This filter is documented in wp-admin/includes/image-edit.php */
$image = apply_filters_deprecated( 'image_save_pre', array( $image, $post_id ), '3.5.0', 'image_editor_save_pre' );
/**
* Filters whether to skip saving the image file.
*
* Returning a non-null value will short-circuit the save method,
* returning that value instead.
*
* @since 2.9.0
* @deprecated 3.5.0 Use 'wp_save_image_editor_file' instead.
*
* @param bool|null $override Value to return instead of saving. Default null.
* @param string $filename Name of the file to be saved.
* @param resource|GdImage $image Image resource or GdImage instance.
* @param string $mime_type The mime type of the image.
* @param int $post_id Attachment post ID.
*/
$saved = apply_filters_deprecated(
'wp_save_image_file',
array( null, $filename, $image, $mime_type, $post_id ),
'3.5.0',
'wp_save_image_editor_file'
);
if ( null !== $saved ) {
return $saved;
}
switch ( $mime_type ) {
case 'image/jpeg':
/** This filter is documented in wp-includes/class-wp-image-editor.php */
return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
case 'image/png':
return imagepng( $image, $filename );
case 'image/gif':
return imagegif( $image, $filename );
case 'image/webp':
if ( function_exists( 'imagewebp' ) ) {
return imagewebp( $image, $filename );
}
return false;
case 'image/avif':
if ( function_exists( 'imageavif' ) ) {
return imageavif( $image, $filename );
}
return false;
default:
return false;
}
}
}
Hooks
- apply_filters( ‘image_editor_save_pre’, WP_Image_Editor $image, int $attachment_id )
-
Filters the WP_Image_Editor instance for the image to be streamed to the browser.
- apply_filters_deprecated( ‘image_save_pre’, resource|GdImage $image, int $attachment_id )
-
Filters the GD image resource to be streamed to the browser.
- apply_filters( ‘jpeg_quality’, int $quality, string $context )
-
Filters the JPEG compression quality for backward-compatibility.
- apply_filters( ‘wp_save_image_editor_file’, bool|null $override, string $filename, WP_Image_Editor $image, string $mime_type, int $post_id )
-
Filters whether to skip saving the image file.
- apply_filters_deprecated( ‘wp_save_image_file’, bool|null $override, string $filename, resource|GdImage $image, string $mime_type, int $post_id )
-
Filters whether to skip saving the image file.