1. Chuẩn bị
Tải hình ảnh để kết hợp
Trước khi làm việc với nhiều hình ảnh, cần phải tải chúng lên. Pillow cho phép làm việc với hầu hết các định dạng hình ảnh phổ biến như JPEG, PNG, BMP, và GIF.
from PIL import Image
# Tải hình ảnh
background = Image.open("background.jpg")
foreground = Image.open("foreground.png")
Ở đây, chúng ta tải hai hình ảnh: hình nền và hình để chèn. Điều quan trọng là đối với một số phương pháp, cả hai hình ảnh cần có cùng kích thước.
2. Chèn chồng hình ảnh
Phương pháp paste()
Phương pháp paste()
cho phép chèn một hình ảnh lên trên hình khác tại tọa độ chỉ định. Cách này hữu ích khi cần đặt một hình lên trên hình khác hoặc tạo hiệu ứng cắt ghép.
# Thay đổi kích thước foreground để phù hợp với kích thước background
foreground = foreground.resize(background.size)
# Chèn hình ảnh lên hình nền
background.paste(foreground, (50, 50)) # Đặt foreground tại tọa độ (50, 50)
# Lưu kết quả
background.save("pasted_image.jpg")
Ở đây, hình foreground
được chèn lên background
bắt đầu từ điểm chèn (50, 50)
. Nếu foreground vượt quá kích thước của background, phần đó sẽ bị cắt đi.
Sử dụng mask với paste()
Phương pháp paste()
cũng hỗ trợ sử dụng mask, cho phép chèn hình ảnh một phần, giữ nguyên các vùng trong suốt. Mask phải ở chế độ L
(màu xám) hoặc RGBA
.
# Tạo mask
mask = Image.open("mask.png").convert("L") # Chuyển mask sang màu xám
# Chèn hình ảnh với mask
background.paste(foreground, (50, 50), mask=mask)
background.save("pasted_with_mask.jpg")
Mask mask.png
xác định phần nào của foreground
sẽ hiển thị và cho phép chèn hình ảnh một cách chính xác lên hình nền.
3. Pha trộn hình ảnh
Phương pháp blend()
Phương pháp blend()
cho phép pha trộn hai hình ảnh với độ trong suốt tương ứng. Phương pháp này tạo ra một hình ảnh mới, là sự pha trộn của hai hình ảnh gốc. Để sử dụng blend()
, cả hai hình ảnh phải có cùng kích thước.
Pha trộn hình ảnh cơ bản
# Thay đổi kích thước hai hình cho cùng kích thước
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
# Pha trộn hình ảnh với hệ số alpha
blended_image = Image.blend(background, foreground, alpha=0.5)
# Lưu kết quả
blended_image.save("blended_image.jpg")
Tham số alpha
xác định mức độ trong suốt của hình foreground
. Nếu
alpha = 0.5
, hai hình ảnh sẽ pha trộn đồng đều. Giá trị alpha = 0.0
làm cho
foreground
hoàn toàn trong suốt (chỉ thấy nền), còn alpha = 1.0
làm cho hình nền hoàn toàn trong suốt (chỉ thấy foreground).
4. Ghép hình ảnh với mask
Phương pháp composite()
Phương pháp composite()
cho phép kết hợp hai hình ảnh dựa trên mask, xác định phần nào của mỗi hình sẽ hiển thị. Phương pháp này rất tiện trong việc tạo các bố cục phức tạp và ghép hình ảnh chính xác.
Ví dụ: Sử dụng composite()
để kết hợp hình ảnh
# Đảm bảo cả hình và mask đều có cùng kích thước
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
mask = mask.resize((500, 500))
# Tạo bố cục với mask
composited_image = Image.composite(foreground, background, mask)
# Lưu hình ảnh
composited_image.save("composited_image.jpg")
Mask xác định phần nào của foreground
và background
sẽ hiển thị trên hình cuối cùng. Vùng trắng của mask làm hiển thị foreground
, vùng đen làm hiển thị background
.
5. Ví dụ
Ví dụ kết hợp các phương pháp paste()
, blend()
, và
composite()
Hãy kết hợp những phương pháp này để tạo một bố cục phức tạp hơn. Giả sử chúng ta có một hình nền, một hình ảnh với độ trong suốt, và một mask.
from PIL import Image
# Tải hình ảnh
background = Image.open("background.jpg").resize((500, 500))
foreground = Image.open("foreground.png").resize((500, 500))
mask = Image.open("mask.png").convert("L").resize((500, 500))
# 1. Pha trộn hình nền và foreground với độ trong suốt
blended_image = Image.blend(background, foreground, alpha=0.3)
# 2. Chèn với mask vào hình cuối
final_composite = Image.composite(foreground, blended_image, mask)
# Lưu kết quả cuối cùng
final_composite.save("final_composition.jpg")
Ví dụ này chỉ ra cách áp dụng lần lượt blend()
và
composite()
để tạo bố cục nhiều lớp.
Ứng dụng thực tế của các phương pháp ghép hình
- Tạo ảnh ghép: Phương pháp
paste()
cho phép thêm nhiều hình ảnh trên một khung vẽ để tạo ảnh ghép và mosaic. - Hiệu ứng chồng và độ trong suốt: Phương pháp
blend()
cho phép tạo các chuyển tiếp mượt mà giữa các hình ảnh, phù hợp cho chỉnh sửa ảnh và tạo hiệu ứng. - Bố cục với mask: Phương pháp
composite()
cho phép kiểm soát chính xác phần nào của hình ảnh sẽ hiển thị, tạo bố cục phức tạp với mask.
So sánh các phương pháp
Phương pháp | Mô tả | Ứng dụng |
---|---|---|
paste() |
Chèn một hình ảnh lên trên hình khác | Ảnh ghép, đặt một hình lên hình khác |
blend() |
Pha trộn hai hình ảnh với độ trong suốt định trước | Chuyển tiếp mượt mà và hiệu ứng chồng |
composite() |
Kết hợp hai hình ảnh dựa trên mask | Bố cục phức tạp và chèn chính xác |
GO TO FULL VERSION