Home » Scala » Thư viện viết bằng ngôn ngữ Scala: AWScala S3 và Scrimage

Thư viện viết bằng ngôn ngữ Scala: AWScala S3 và Scrimage

1.Giới thiệu


Trong quá trình thực hiện dự án, thường phát sinh yêu cầu liên quan tới chức năng lưu trữ ảnh đại diện, ảnh trong nội dung các bài viết. Một trong số các giải pháp hiệu quả là sử dụng dịch vụ lưu trữ được Amazon cung cấp – Amazon Simple Storage Service (Amazon S3), kết hợp với việc điều chỉnh kích thước, độ phân giải của hình ảnh.
Bài viết xin được tổng hợp về 2 thư viện dành cho ngôn ngữ Scala :
+ AWScala: thư viện về các dịch vụ của Amazon. Ví dụ qua kết nối với Amazon S3.
+ Scrimage: thư viện xử lý, thao tác với các tệp tin hình ảnh. Ví dụ qua việc thay đổi độ phân giải của ảnh.

2. Thư viện AWScala


Repository link: https://github.com/seratch/AWScala
AWScala là thư viện kết nối và thao tác với các dịch vụ cung cấp bởi Amazon: IAM, STS, Amazon EC2, Amazon S3, …
AWScala có thể tích hợp với Play framework
– Khai báo trong application.conf


  • Khởi tạo S3 và upload file


  • Lưu ý
    Mỗi tài khoản Amazon có thể tạo nhiều cặp (S3_ID, S3_SECRECT_KEY) với quyền truy cập khác nhau. Từ đó ta chỉ có thể sử dụng các hàm trong thư viện AWScala S3 có quyền truy cập tương ứng. Ví dụ nếu cặp (S3_ID, S3_SECRECT_KEY) chỉ cho phép đọc, ghi trong 1 bucket định sẵn thì khi ta sử dụng các hàm có dạng


Kết quả sẽ là lỗi


3. Thư viện Scrimage


Repository link : https://github.com/sksamuel/scrimage
Scrimage là bộ thư viện dành cho việc xử lý hình ảnh, hỗ trợ các chức năng thường dùng như: copy, flip, filter, resize, rotate, scale, …
– Thực hiện thay đổi kích thước của một ảnh về thông số định sẵn


Lưu ý
– Sử dụng resize hay scale:
+ resize (resizeTo): Hàm resize không thay đổi độ phân giải của ảnh mà chỉ thay đổi phần khung chứa ảnh (canvas). Nếu tham số truyền vào lớn hơn độ phân giải của ảnh gốc, thì ảnh sẽ được bao thêm bên ngoài bởi một phần nền. Nếu tham số truyền vào nhỏ hơn độ phân giải của ảnh gốc, ảnh sẽ được “cắt” lấy một khoảng bằng đúng tham số truyền vào
+ scale (scaleTo): Hàm scale thay đổi cả độ phân giải và phần khung chứa ảnh (canvas)
Do đó, nếu muốn đưa ảnh về một kích thước chính xác mong muốn, ta sử dụng scale (scaleTo) mà không dùng resize (resizeTo). Ngược lại, hàm resize (resizeTo) tương ứng với việc crop bức ảnh.
– Sử dụng writer
Scrimage cung cấp một số writer hỗ trọ ghi ra các định dạng khác nhau: JpegWriter, PngWriter, GifWriter. Trong đó, JpegWriter có hiệu quả trong việc giảm dung lượng của ảnh, tuy nhiên sẽ khiến chất lượng ảnh giảm xuống.

  • Cách sử dụng writer


  • Các ảnh gif động khi được dùng trong hàm resize hoặc scale sẽ trở thành ảnh tĩnh

4. Kết luận


Bài viết đã giới thiệu về hai thư viện: AWScala – ví dụ kết nối với Amazon S3, Scrimage – ví dụ chuyển đổi độ phân giải của ảnh.
Ngoài ra trong hai thư viện trên còn nhiều chức năng và tiện ích khác, thích hợp để chúng ta sử dụng và kết hợp linh hoạt.