我在实现David代码时遇到了很多问题。我有一些错误,比如“WP\\u IMAGE\\u EDITOR\\u GD”找不到,“WatermarkImageEditor”找不到……当我让它工作时,它不能与alpha通道png一起工作,所以我花了很多时间让它与它们一起工作。所以我会解释我是怎么得到它的。
将所有这些代码放在一个php文件中,我的称为水印。php。
<?php
class WatermarkImageEditor extends WP_Image_Editor_GD {
public function stamp_watermark( $stampPath, $marginH=0, $marginV=0 ) {
$loaded = $this->load();
if ( is_wp_error( $loaded ) ) return $loaded;
$stamp=imagecreatefrompng( $stampPath );
if(is_wp_error($stamp)){ return $stamp; }
imagealphablending($stamp, true);
$sx = imagesx( $stamp );
$sy = imagesy( $stamp );
imagealphablending($this->image, true);
imagecopy(
$this->image, $stamp,$marginH,$this->size[\'height\']-$sy-$marginV,0,0,$sx, $sy
);
}
public static function test( $args = [] ) { return parent::test( $args ); }
public static function supports_mime_type( $mime_type ) { return parent::supports_mime_type( $mime_type ); }
}
现在,我们需要注册过滤器。我在自己的插件中使用它,所以我在主插件文件中有此代码,但您也可以将其放在其他地方,如函数中。php。请注意,我正在使用require\\u once加载水印。php,所以水印。php必须位于同一文件夹中。
add_filter( \'wp_image_editors\', function( $editors ) {
require_once __DIR__. \'/watermark.php\';
if ( ! is_array( $editors ) )
return $editors; //someone broke the filtered value
array_unshift( $editors, "WatermarkImageEditor");
return $editors;
} );
最后一步,调用stamp\\u watermark()。在这个示例中,我从磁盘加载一个图像,调整其大小,放置水印,然后保存它。请注意,stamp\\u watermark()在第一个参数上接收水印的路径或url,其他两个参数是可选边距。
$editor= wp_get_image_editor($imagePath);
$editor->resize(1920, 1080, TRUE);
if(is_callable([$editor,\'stamp_watermark\'])){
$success = $editor->stamp_watermark( ABSPATH.\'wp-content/uploads/watermark-full.png\', 20, 20 );
if(!is_wp_error($success)){ $editor->save($imagePath); }
}