Sử dụng ImageMagick với PHP
Trong quá trình làm việc với các dự án web không ít lần chúng ta phải đụng đến phần xử lý hình ảnh, mà phần lớn các thao tác sẽ là xử lý upload ảnh và resize.
Mặc định PHP đã tích hợp sẵn thư viện GD (Graphics Draw) vào mã nguồn của để giúp chúng ta có thể thực hiện các yêu cầu trên. Nhưng đôi khi việc sử dụng GD mang lại một chút phiền toái từ cách viết dài dòng cũng như việc truyền tham số khá là phức tạp.
Nên mình quyết định tìm đến ImageMagick. Một thư viện xử lý hình ảnh mạnh mẽ hỗ trợ PHP và đúng thật là cái gì đụng đến magic thì cũng thật là màu nhiệm. Nói không quá nhưng mà đây là công cụ được giang hồ đồn như là Photoshop của thế giới PHP
ImageMagick là Photoshop cho ứng dụng web.
Cài đặt
Các bạn có thể cài đặt theo các bước hướng dẫn được ghi chú rõ ràng trên trang chủ. Tùy theo hệ điều hành mà các bạn lựa chọn phiên bản thích hợp https://www.imagemagick.org/script/download.php
Sau khi cài đặt các bạn vào terminal gõ lệnh convert
nếu ra như màn hình sau thì việc cài đặt đã hoàn tất và chúng ta sẵn sang để sử dụng ImageMagick
Sử dụng
Với việc sử dụng GD trong PHP chứng ta phải thực hiện tất cả các bước sau đây:
// Load nội dung tấm hình gốc
$src_image = imagecreatefromjpeg('image.jpg');
// Xác định kích thước của tấm hình gốc
$image_x = imagesx($src_image);
$image_y = imagesy($src_image);
// Tạo 1 tấm hình mới với kích thước cho sẵn
$dst_image = imagecreatetruecolor(320, 60);
// Thay đổi kích thước từ tấm hình đã có
imagecopyresized($dst_image,$src_image,0,0,0,0,320,60,$image_x,$image_y);
// Lưu bức ảnh vừa được resize
imagejpeg($dst_image, 'image_320_60.jpg');
Với đoạn code trên ít nhất chúng ta phải 6 hàm (trừ các hàm lấy tọa đồ) để có thể thực thi một thao tác đơn giản là resize một tầm hình. Và các tham số truyền vào gây ra sự hoang mang tột độ khi sử dụng.
Còn đây là đoạn code khi sử dụng ImageMagick
$image = new Imagick('image.jpg');
$image->resizeImage(320, 60, imagick::FILTER_GAUSSIAN, 1);
$image->writeImage('image_320_60.jpg');
Không cần giải thích gì nhiều về đoạn code trên, quá tường minh và dễ hiểu tham số cuối cùng được truyền vào trong hàm resizeImage() để xác định độ nhòe (blur) của tấm ảnh ở đây mình để là 1
Một số hàm thông dụng
Lấy thông tin của tấm ảnh
$image = new Imagick('image.jpg');
// Lấy kích thước của ảnh
$image->getImageSize();
// Lấy tên của tấm ảnh
$image->getImageFilename();
// Lấy Mime type của tấm ảnhçç
$image->getImageMimeType();
// Lấy format của ảnh
$image->getFormat();
Thay đổi định dạng, chất lượng và kích thước của ảnh
$image = new Imagick('image.jpg');
// Chuyển định dạng từ JPG sang PNG
$image->setImageFormat('png');
// Giảm chất lượng ảnh để giảm dung lượng
$image->setCompressionQuality(75);
// Thay đổi kích thước mong muốn
$image->resizeImage(320, 60, Imagick::FILTER_GAUSSIAN, 1);
// Lưu ảnh mới
$image->writeImage('new_image.png');
Quá đơn giản đúng không nào. Từ đây những vấn đề liên quan đến xử lý hình ảnh thì cứ đưa sang cho ImageMagick chắc chắn các bạn sẽ có 1 trải nghiệm thú vị.
Happy Coding !!!