Tôi đã có rất nhiều vấn đề khi thực hiện mã David. Tôi đã gặp lỗi như không tìm thấy WP WP_IMAGE_EDITOR_GD, không tìm thấy được Vì vậy, tôi sẽ giải thích làm thế nào tôi có nó.
Đặt tất cả mã này vào một tệp php, của tôi được gọi là watermark.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 ); }
}
Bây giờ, chúng ta cần đăng ký bộ lọc. Tôi đang sử dụng nó trong plugin riêng của mình, vì vậy tôi có mã này trên tệp plugin chính của mình, nhưng bạn cũng có thể đặt nó ở nơi khác như hàm.php. Lưu ý rằng tôi đang sử dụng allow_once để tải watermark.php, vì vậy watermark.php phải nằm trong cùng một thư mục.
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;
} );
Và bước cuối cùng, gọi đến tem_watermark (). Trong ví dụ này, tôi đang tải một hình ảnh từ đĩa, thay đổi kích thước của nó, đặt hình mờ và lưu nó. Lưu ý rằng tem_watermark () nhận được trên tham số đầu tiên, đường dẫn hoặc url của hình mờ, 2 tham số còn lại là lề tùy chọn.
$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); }
}