Hướng dẫn dùng jpg resize trong PHP

Thư viện PHP Imagick là một thư viện được sử dụng phổ biến để chỉnh sửa ảnh của ngôn ngữ lập trình PHP. Nó được sử dụng trong các Framework, CMS nổi tiếng của PHP. Hôm nay mình sẽ giới thiệu và hướng dẫn cài đặt và sử dụng thư viện này nhé!

Bạn có thể tham khảo toàn bộ document của Imagick ở đây:

  • https://www.php.net/manual/en/book.imagick.php

Cài đặt thư viện PHP Imagick

Đầu tiên chúng ta cần phải kiểm tra xem thư viện đã được cài đặt hay chưa. Bạn có thể kiểm tra trực tiếp sử dụng hàm phpinfo() bằng cách đặt đoạn code sau vào file php và thực thi file php đó.

Hoặc trên server chúng ta có thể sử dụng command sau:

php -m | grep imagick

Nếu chưa cài đặt thư viện này thì các bạn sử dụng command sau để cài đặt (trên Linux)

# Ubuntu / Debian
sudo apt install php-imagick

# Redhat / Fedora / CentOS
sudo yum install php-imagick

Sau đó là thêm extension vào file php.ini

extension=imagick.so

Chú ý: Trên các phần mềm như Xampp, Wamp, MAMP thì extension này có sẵn. Bạn không phải cài đặt mà chỉ cần thêm nó vào file php.ini thôi.

Hướng dẫn sử dụng PHP Imagick

Đầu tiên chúng ta cần import thư viện vào.

Sau đó khởi tạo 1 đối tượng xử lý ảnh Imagick

$imagick = new Imagick("https://vinasupport.com/la/79067.jpg");

Bây giờ bạn có thể làm gì với nó cũng đc.

VD: Resize ảnh

$imagick->resizeImage(50,50,Imagick::FILTER_LANCZOS,1);

Và làm nhiều thứ khác.

Cuối cùng là xuất ảnh ra chỗ khác.

$imagick->writeImage('out.jpg');

Vậy đoạn code cuối cùng của chúng ta là:

resizeImage(50,50,Imagick::FILTER_LANCZOS,1);
$imagick->writeImage('out.jpg');

Toàn bộ document ở đây:

Nguồn: vinasupport.com

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 !!!