1. Cắt ảnh
Khái niệm cắt và ứng dụng của nó
Bây giờ mình sẽ hướng dẫn các bạn cách cắt và xoay ảnh nha. Kỹ năng này cực kỳ hữu ích trong hàng tá dự án — từ chuẩn bị đồ họa cho các trang web cho tới tạo nội dung cho mạng xã hội.
Cắt ảnh - kiểu như bạn "xén" đi các phần thừa của bức ảnh, để tập trung vào đối tượng chính vậy. Hãy tưởng tượng bạn có một bức ảnh hoàng hôn đẹp lắm, nhưng xung quanh lại vô tình lọt vào vài người hiếu kỳ. Cắt ảnh sẽ giúp bạn loại bỏ họ (tất nhiên là "ảo diệu" thôi nhé), mà không cần phải kiện cáo gì cả!
Phương thức crop()
Phương thức crop()
nhận các tọa độ của vùng hình chữ nhật bạn muốn cắt ra từ bức ảnh. Các tọa độ này được mô tả dưới dạng bốn giá trị: (trái, trên, phải, dưới)
.
# Cắt ảnh
cropped_image = image.crop((100, 100, 400, 400))
# Lưu ảnh đã cắt
cropped_image.save("cropped_example.jpg")
Trong ví dụ này, bức ảnh sẽ được cắt thành vùng có góc trên trái tại điểm (100, 100)
và góc dưới phải tại điểm (400, 400)
. Phương thức này tạo ra một hình ảnh mới từ phần được chỉ định của hình ảnh gốc.
Cắt động dựa trên kích thước của ảnh
Nếu bạn muốn cắt ảnh ở giữa, có thể tính toán tọa độ cắt dựa trên kích thước của nó:
width, height = image.size
left = (width - 200) / 2
top = (height - 200) / 2
right = (width + 200) / 2
bottom = (height + 200) / 2
center_cropped_image = image.crop((left, top, right, bottom))
center_cropped_image.save("center_cropped_example.jpg")
Mã này sẽ cắt phần trung tâm của ảnh, kích thước 200x200 pixel. Việc tính toán các tọa độ đảm bảo rằng vùng cắt sẽ nằm chính giữa bức ảnh.
2. Xoay ảnh
Xoay ảnh giúp thay đổi hướng của nó, cực kỳ hữu ích khi bạn chụp ảnh sai hướng hoặc muốn tạo hiệu ứng nghệ thuật.
Phương thức rotate()
Phương thức rotate()
xoay ảnh với góc xác định ngược chiều kim đồng hồ. Góc được nhập dưới dạng đơn vị độ, và phương thức này sẽ tạo ra một ảnh mới đã được xoay.
# Xoay ảnh 90 độ ngược chiều kim đồng hồ
rotated_image = image.rotate(90)
rotated_image.save("rotated_90_example.jpg")
Trong ví dụ trên, bức ảnh sẽ được xoay 90 độ ngược chiều kim đồng hồ. Bạn cũng có thể nhập góc khác (ví dụ: 45, 180, hoặc 270 độ) để đạt được kết quả mong muốn.
Kiểm soát viền trắng khi xoay
Theo mặc định, rotate()
thêm các viền trắng (hoặc trong suốt nếu sử dụng chế độ RGBA) vào các cạnh bức ảnh để giữ toàn bộ nội dung của nó. Nếu bạn muốn bức ảnh lấp đầy toàn khung mà không có viền, hãy sử dụng tham số expand=True
.
# Xoay và mở rộng ảnh để nó lấp đầy toàn bộ khung mà không để viền
rotated_expanded_image = image.rotate(45, expand=True)
rotated_expanded_image.save("rotated_expanded_example.jpg")
Trường hợp này, Pillow sẽ tăng kích thước của bức ảnh để chứa toàn bộ nội dung, rất hữu ích khi xoay ở các góc không chuẩn (ví dụ: 45 độ).
3. Phản chiếu ảnh
Phản chiếu ảnh cho phép bạn lật ngược hình ảnh theo chiều ngang hoặc chiều dọc. Điều này rất tiện khi bạn cần thay đổi hướng của đối tượng trong ảnh hoặc tạo hiệu ứng đối xứng.
Phương thức transpose()
Phương thức transpose()
được sử dụng để phản chiếu ảnh và hỗ trợ các tham số sau:
Image.FLIP_LEFT_RIGHT
: Phản chiếu theo chiều ngang.Image.FLIP_TOP_BOTTOM
: Phản chiếu theo chiều dọc.
# Phản chiếu theo chiều ngang
flipped_horizontal = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal.save("flipped_horizontal_example.jpg")
# Phản chiếu theo chiều dọc
flipped_vertical = image.transpose(Image.FLIP_TOP_BOTTOM)
flipped_vertical.save("flipped_vertical_example.jpg")
Các lệnh này lật ngược hình ảnh theo chiều ngang và chiều dọc, rất hữu ích cho các hiệu ứng khác nhau hoặc để chỉnh sửa hướng.
Ví dụ thực tế của cắt, xoay và phản chiếu ảnh
- Tập trung vào một phần cụ thể của ảnh: Cắt ảnh giúp bạn làm nổi bật phần cần thiết, rất hữu ích khi tạo ảnh chân dung, cắt bỏ các chi tiết thừa và chuẩn bị ảnh cho mạng xã hội hoặc trang web.
- Chỉnh sửa hướng ảnh: Xoay ảnh để sửa hướng, đặc biệt khi thiết bị của bạn chụp sai hướng. Ví dụ như sửa ảnh được chụp ở chế độ ngang để đăng ở chế độ dọc.
- Tạo hiệu ứng đối xứng: Phản chiếu ảnh hay được sử dụng trong thiết kế để tạo ra các hình đối xứng, hiệu ứng hình ảnh thú vị và nâng cao bố cục.
4. Lỗi thường gặp và cách tránh
Khi làm việc với Pillow, đôi khi bạn sẽ gặp lỗi, điều mà có lẽ ai mới học cũng sẽ trải qua. Một trong những lỗi phổ biến là cố cắt ảnh vượt ra ngoài kích thước thực tế của nó. Hãy luôn kiểm tra kích thước ảnh và đặt tọa độ cắt trong giới hạn kích thước đó.
Một điều cần lưu ý nữa — khi xoay ảnh, nó có thể bị cắt nếu dùng phương thức `rotate` mà không thiết lập thêm. Điều này xảy ra do kích thước ảnh thay đổi khi xoay. Để tránh điều đó, hãy sử dụng tham số expand=True
, tham số này tự động điều chỉnh kích thước:
# Xoay ảnh 45 độ với mở rộng để tránh mất góc
rotated_image = image.rotate(45, expand=True)
rotated_image.save("rotated_expanded.jpg")
GO TO FULL VERSION