Việc quản lý kích thước ảnh trong WordPress là yếu tố quan trọng giúp tối ưu hóa tốc độ tải trang và dung lượng lưu trữ. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách resize hàng loạt ảnh trong thư mục uploads của WordPress bằng PHP hoặc Bash. Không chỉ giúp cải thiện hiệu suất trang web, phương pháp này còn giúp bạn tiết kiệm đáng kể không gian lưu trữ mà không cần cài thêm plugin. Cùng tìm hiểu chi tiết từng bước để triển khai hiệu quả ngay hôm nay!
Bạn có thể sử dụng PHP hoặc Bash để resize tất cả các ảnh trong thư mục /wp-content/uploads/2024/
. Dưới đây là hai cách để thực hiện:
1. Sử dụng PHP
Bạn có thể dùng thư viện GD hoặc Imagick để resize ảnh trong PHP. Dưới đây là ví dụ dùng GD:
<?php
function resize_image($file, $new_width) {
list($width, $height) = getimagesize($file);
$new_height = ($height / $width) * $new_width; // Tính chiều cao mới giữ tỷ lệ khung hình
$image = imagecreatefromjpeg($file);
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($new_image, $file, 90); // Lưu ảnh với chất lượng 90%
imagedestroy($image);
imagedestroy($new_image);
}
$directory = __DIR__ . '/wp-content/uploads/2024/';
$images = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory)
);
foreach ($images as $image) {
// Kiểm tra nếu file là ảnh .jpg
if ($image->isFile() && strtolower($image->getExtension()) === 'jpg') {
list($width, $height) = getimagesize($image->getPathname()); // Lấy kích thước ảnh
if ($width > 800) { // Kiểm tra xem chiều rộng có lớn hơn 800 pixel không
resize_image($image->getPathname(), 800); // Resize ảnh chỉ nếu chiều rộng lớn hơn 800px
echo "Đã thay đổi kích thước: " . $image->getPathname() . "\n";
} else {
echo "Chiều rộng của " . $image->getPathname() . " nhỏ hơn hoặc bằng 800 pixel, không thay đổi kích thước.\n";
}
}
}
?>
Giải thích mã
- Hàm
resize_image
: Không thay đổi, giữ nguyên chức năng thay đổi kích thước ảnh.
- Sử dụng
RecursiveDirectoryIterator
: Dùng để duyệt qua các thư mục con. RecursiveIteratorIterator
cho phép bạn lặp qua tất cả các file trong thư mục gốc và các thư mục con của nó.
- Kiểm tra định dạng file: Mỗi file được kiểm tra để đảm bảo đó là file ảnh với định dạng
.jpg
trước khi thực hiện thao tác thay đổi kích thước.
- In kết quả: Thông báo cho người dùng biết file nào đã được thay đổi kích thước và file nào không cần thay đổi.
Bây giờ bạn có thể sử dụng đoạn mã này để thay đổi kích thước tất cả các file ảnh .jpg
trong thư mục cụ thể và cả các thư mục con của nó.
2. Sử dụng Bash
Nếu bạn có quyền truy cập SSH vào server, bạn có thể dùng lệnh ImageMagick để resize ảnh. Đầu tiên, cài đặt ImageMagick nếu chưa có:
sudo apt-get install imagemagick
Sau đó, bạn có thể chạy lệnh sau để resize tất cả các ảnh:
#!/bin/bash
# Đặt đường dẫn tới thư mục ảnh
directory="/path/to/wordpress/wp-content/uploads/2024"
# Kiểm tra xem thư mục có tồn tại không
if [ ! -d "$directory" ]; then
echo "Thư mục không tồn tại: $directory"
exit 1
fi
# Tìm tất cả các ảnh .jpg trong thư mục và các thư mục con
find "$directory" -type f -name "*.jpg" | while read -r img; do
# Lấy chiều rộng của ảnh
width=$(identify -format "%w" "$img")
# Chỉ thay đổi kích thước nếu chiều rộng lớn hơn 800 pixel
if [ "$width" -gt 800 ]; then
convert "$img" -resize 800x "$img"
echo "Đã thay đổi kích thước: $img"
else
echo "Chiều rộng của $img nhỏ hơn 800 pixel, không thay đổi kích thước."
fi
done
- Đoạn script này sẽ resize tất cả các ảnh
.jpg
trong thư mục /wp-content/uploads/2024/
với chiều rộng tối đa là 800px.
- Bạn có thể điều chỉnh các tham số khác cho lệnh
convert
theo yêu cầu.
Chạy Bash Script
Tạo file bash script, ví dụ resize-images.sh
.Thêm quyền thực thi:
chmod +x resize-images.sh
Chạy script:
Cả hai cách trên đều giúp bạn resize tất cả các ảnh trong thư mục được chỉ định. Hãy chọn cách phù hợp với môi trường của bạn.