$value) { $image_id = $value['id'] ?? false; if (!$image_id) { continue; } if ($this->remove_watermark_image($image_id)) { $link = wp_get_attachment_url($image_id); $image_name = get_post_field('guid', $image_id); ?>
= __('Done') ?>: = esc_attr($image_name) ?>
Dont forget press Ctrl + F5 '; echo 'Maybe you need reGenerate Thumbnails Advanced
'; $return = ob_get_clean(); if (!$return) { wp_send_json_error('Error'); wp_die(); } wp_send_json_success($return); wp_die(); } public static function get_test_folder() { $return = WP_CONTENT_DIR . "/uploads" . self::$test_folder; if (!file_exists($return)) { mkdir($return, 0755, true); } return $return; } public static function get_backup_folder() { $return = WP_CONTENT_DIR . "/uploads" . self::$backup_folder; if (!file_exists($return)) { mkdir($return, 0755, true); } return $return; } public static function check_gd_library() { if (extension_loaded('gd') && function_exists('gd_info')) { return true; } } function test_watermark() { // only for get param if (!isset($_GET['adminz_test_watermark'])) { return; } // only for admin if (!current_user_can('administrator')) { return; } // only valid watermark if (!$this->get_watermark_image()) { die("watermark not valid! You can use: https://cloudconvert.com/png-converter"); } $__args = [ 'post_type' => ['attachment'], 'post_status' => ['inherit'], 'posts_per_page' => 1, ]; $posts = get_posts($__args); // Có thể sử dụng get_posts để tránh lỗi overhead if (!empty($posts) and is_array($posts)) { foreach ($posts as $key => $post) { $image_id = $post->ID; $images = $this->test_watermark_image($image_id); if (empty($images)) { continue; } foreach ($images as $index => $image) { if ($image instanceof \GdImage) { // Lưu hình ảnh tạm thời vào một tệp $test_folder = $this->get_test_folder(); $test_file_path = $test_folder . '/' . basename($index) . '.jpg'; imagejpeg($image, $test_file_path); // Lưu tệp hình ảnh imagedestroy($image); // Giải phóng bộ nhớ // Xuất hình ảnh ra HTML $test_file_url = wp_upload_dir()['baseurl'] . self::$test_folder . '/' . basename($index) . '.jpg'; $ximage = imagesx($image); $yimage = imagesy($image); echo <<
$ximage x $yimage
HTML;
}
}
}
} else {
echo __('Sorry, no posts matched your criteria.');
}
exit;
}
function run_watermark() {
// only for get param
if (!isset($_GET['adminz_run_watermark'])) {
return;
}
// only for admin
if (!current_user_can('administrator')) {
return;
}
// only valid watermark
if (!$this->get_watermark_image()) {
die("watermark not valid! You can use: https://cloudconvert.com/png-converter");
}
global $wpdb;
// default array
$ran_ids = get_transient($this->transient_name);
if (!$ran_ids) $ran_ids = [0];
// ignore waterwark id
$ran_ids[] = $this->watermark_id;
$ran_ids = array_map('intval', $ran_ids);
$placeholders = implode(',', array_fill(0, count($ran_ids), '%d'));
$sql = $wpdb->prepare(
"
SELECT ID
FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_mime_type LIKE 'image/%'
AND ID NOT IN ($placeholders)
",
$ran_ids
);
$image_ids = $wpdb->get_col($sql);
if (!empty($image_ids)) {
foreach ((array) $image_ids as $key => $image_id) {
$this->add_watermark_image($image_id);
echo "";
print_r($image_id . "------------- DONE ----------------- ");
echo "";
$ran_ids[] = $image_id;
}
set_transient($this->transient_name, $ran_ids, DAY_IN_SECONDS);
} else {
echo 'No image found!';
}
echo "";
print_r('------------- IMAGES PROCESSED -------------');
echo "";
echo "";
print_r($ran_ids);
echo "";
exit;
}
function remove_watermark_image($attachment_id) {
// get paths
$paths = $this->get_image_paths($attachment_id);
$statuses = [];
// Áp dụng watermark cho tất cả các file trong danh sách
foreach ((array) $paths as $key => $path) {
$statuses[] = $this->restoreWatermark($path);
}
return (count(array_unique($statuses)) == 1);
}
function get_image_paths($attachment_id) {
// Kiểm tra xem attachment có tồn tại hay không
$attachment_path = get_attached_file($attachment_id);
if (!$attachment_path || !file_exists($attachment_path)) {
return false; // Nếu không tồn tại, kết thúc function
}
// Lấy metadata của attachment
$metadata = wp_get_attachment_metadata($attachment_id);
if (empty($metadata) || !isset($metadata['file'])) {
return false;
}
// Lấy đường dẫn upload base
$upload_dir = wp_upload_dir();
// Tập hợp các đường dẫn cần xử lý
$paths = [];
// origin file
$origin_file_path = str_replace('-scaled', '', $upload_dir['basedir'] . '/' . $metadata['file']);
if (file_exists($origin_file_path)) {
$paths[] = $origin_file_path;
}
// scaled
$scaled_file_path = $upload_dir['basedir'] . '/' . $metadata['file'];
if (file_exists($scaled_file_path)) {
$paths[] = $scaled_file_path;
}
// Thêm các kích thước khác vào danh sách
if (isset($metadata['sizes']) && is_array($metadata['sizes'])) {
foreach ($metadata['sizes'] as $size => $size_info) {
$size_file_path = $upload_dir['basedir'] . '/' . dirname($metadata['file']) . '/' . $size_info['file'];
if (file_exists($size_file_path)) {
$paths[] = $size_file_path;
}
}
}
// Loại bỏ trùng lặp (nếu có)
$paths = array_unique($paths);
return $paths;
}
function test_watermark_image($attachment_id) {
// get paths
$paths = $this->get_image_paths($attachment_id);
// Áp dụng watermark cho tất cả các file trong danh sách
$return = [];
foreach ((array) $paths as $key => $path) {
$image = $this->testWatermark($path);
if ($image instanceof \GdImage) {
$return[] = $image; // Lưu hình ảnh vào danh sách
}
}
return $return;
}
function add_watermark_image($attachment_id) {
// get paths
$paths = $this->get_image_paths($attachment_id);
// Áp dụng watermark cho tất cả các file trong danh sách
foreach ((array) $paths as $key => $path) {
$this->setWatermark($path);
}
return true;
}
function add_watermark_images($metadata, $attachment_id) {
$this->add_watermark_image($attachment_id);
return $metadata;
}
function backup_image($file_path) {
$backup_folder = $this->get_backup_folder();
$backup_file_path = $backup_folder . '/' . basename($file_path);
rename($file_path, $backup_file_path); // Di chuyển ảnh cũ vào backup
error_log(json_encode("Backup: " . $backup_file_path));
}
function restore_image($file_path) {
$backup_folder = $this->get_backup_folder();
$backup_file_path = $backup_folder . '/' . basename($file_path);
if (file_exists($backup_file_path)) {
// xoá $file_path
unlink($file_path);
// move $backup_file_path về file_path
rename($backup_file_path, $file_path);
return true;
}
return false;
}
function save_image($image, $file_path) {
$file_extension = pathinfo($file_path, PATHINFO_EXTENSION);
switch (strtolower($file_extension)) {
case 'jpeg':
case 'jpg':
imagejpeg($image, $file_path, 100);
break;
case 'png':
imagepng($image, $file_path, 0);
break;
case 'gif':
imagegif($image, $file_path);
break;
default:
// Không hỗ trợ loại file
return;
}
}
function copy_watermark_to_image($image, $watermark) {
// Lấy kích thước ảnh gốc
$image_width = imagesx($image);
$image_height = imagesy($image);
// Tính toán kích thước watermark
$watermark_height_max = $image_height * 0.1; // Chiều cao tối đa 10% của ảnh
$watermark_width = imagesx($watermark); // Chiều rộng của watermark
$watermark_height = imagesy($watermark); // Chiều cao thực tế của watermark
// Nếu chiều cao watermark lớn hơn tối đa, điều chỉnh lại chiều rộng
if ($watermark_height > $watermark_height_max) {
$scale_factor = $watermark_height_max / $watermark_height;
$new_watermark_width = (int) ($watermark_width * $scale_factor);
$new_watermark_height = (int) ($watermark_height * $scale_factor);
$scaled_watermark = imagecreatetruecolor($new_watermark_width, $new_watermark_height);
// Bật chế độ xử lý alpha
imagealphablending($scaled_watermark, false);
imagesavealpha($scaled_watermark, true);
// Tạo màu trong suốt
$transparent = imagecolorallocatealpha($scaled_watermark, 255, 255, 255, 127);
imagefill($scaled_watermark, 0, 0, $transparent);
imagecopyresampled($scaled_watermark, $watermark, 0, 0, 0, 0, $new_watermark_width, $new_watermark_height, $watermark_width, $watermark_height);
$watermark = $scaled_watermark; // Cập nhật watermark với kích thước mới
}
// Tính toán vị trí chèn watermark
$y = (int) ($image_height * 0.5); // Vị trí từ đỉnh là 70%
// Lặp lại watermark theo chiều ngang
for ($x = 0; $x < $image_width; $x += imagesx($watermark)) {
imagecopy(
$image,
$watermark,
$x,
$y,
0,
0,
imagesx($watermark),
imagesy($watermark)
);
}
return $image;
}
function restoreWatermark($file_path) {
return $this->restore_image($file_path);
}
function testWatermark($file_path) {
$watermark = $this->get_watermark_image();
if (!$file_path) {
return;
}
if (!$watermark) {
return;
}
// Kiểm tra loại file và tạo ảnh gốc tương ứng
$image = $this->getGdImage($file_path);
if (!$image) {
return;
}
// copy watermark to image
$image = $this->copy_watermark_to_image($image, $watermark);
// Giải phóng bộ nhớ
imagedestroy($image);
imagedestroy($watermark);
return $image;
}
function setWatermark($file_path) {
$watermark = $this->get_watermark_image();
if (!$file_path) {
return;
}
if (!$watermark) {
return;
}
// Kiểm tra loại file và tạo ảnh gốc tương ứng
$image = $this->getGdImage($file_path);
if (!$image) {
return;
}
// copy watermark to image
$image = $this->copy_watermark_to_image($image, $watermark);
// Di chuyển ảnh cũ vào thư mục backup
$this->backup_image($file_path);
// Lưu ảnh đã được chèn watermark theo đúng định dạng file gốc
$this->save_image($image, $file_path);
// Giải phóng bộ nhớ
imagedestroy($image);
imagedestroy($watermark);
}
function get_watermark_image() {
// return if exists
if ($this->watermark_image) {
return $this->watermark_image;
}
// check gd library
if (!$this->check_gd_library()) {
return;
}
if ($watermark_image = $this->getGdImage()) {
$this->watermark_image = $watermark_image;
return $this->watermark_image;
}
return false;
}
function getGdImage($file_path = false) {
if (!$file_path) {
$file_path = get_attached_file($this->watermark_id);
}
$filetype = wp_check_filetype(basename($file_path), null);
$return = false;
switch ($filetype['type']) {
case 'image/jpeg':
$return = @imagecreatefromjpeg($file_path);
break;
case 'image/png':
$return = @imagecreatefrompng($file_path);
break;
case 'image/gif':
$return = @imagecreatefromgif($file_path);
break;
}
return $return;
}
}