Làm việc với hình ảnh
Aspose.Words cho phép người dùng làm việc với hình ảnh một cách rất linh hoạt. Trong bài viết này, bạn chỉ có thể khám phá một số khả năng làm việc với hình ảnh.
Chèn một hình ảnh
DocumentBuilder cung cấp một số tính năng nạp chồng của phương thức insert_image cho phép bạn chèn hình ảnh nội tuyến hoặc hình ảnh nổi. Nếu hình ảnh là siêu tệp EMF hoặc WMF, nó sẽ được chèn vào tài liệu ở định dạng siêu tệp. Tất cả các hình ảnh khác sẽ được lưu trữ ở định dạng PNG. Phương thức Chèn hình ảnh có thể sử dụng hình ảnh từ nhiều nguồn khác nhau:
- Từ một tệp hoặc
URL
bằng cách truyền tham số chuỗi - Từ luồng bằng cách truyền tham số
Stream
- Từ mảng byte bằng cách truyền tham số mảng byte
Đối với mỗi phương pháp Chèn hình ảnh, còn có các mức quá tải khác cho phép bạn chèn hình ảnh với các tùy chọn sau:
- Nội tuyến hoặc nổi tại một vị trí cụ thể, ví dụ Chèn hình ảnh
- Tỷ lệ phần trăm hoặc kích thước tùy chỉnh; hơn nữa, phương thức DocumentBuilder.insert_image trả về một đối tượng Shape vừa được tạo và chèn để bạn có thể sửa đổi thêm các thuộc tính của Shape
Chèn một hình ảnh nội tuyến
Chuyển một chuỗi đại diện cho tệp chứa hình ảnh tới insert_image để chèn hình ảnh vào tài liệu dưới dạng đồ họa nội tuyến.
Ví dụ mã sau đây cho biết cách chèn hình ảnh nội tuyến ở vị trí con trỏ vào tài liệu:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_image(docs_base.images_dir + "Logo.jpg")
doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_inline_image.doc")
Chèn một hình ảnh nổi (được định vị tuyệt đối)
Ví dụ về mã sau đây cho biết cách chèn hình ảnh nổi từ tệp hoặc URL
ở vị trí và kích thước được chỉ định:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_image(docs_base.images_dir + "Logo.jpg",
aw.drawing.RelativeHorizontalPosition.MARGIN,
100,
aw.drawing.RelativeVerticalPosition.MARGIN,
100,
200,
100,
aw.drawing.WrapType.SQUARE)
doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_floating_image.doc")
Cách trích xuất hình ảnh từ tài liệu
Tất cả hình ảnh được lưu trữ bên trong các nút Shape trong Document. Để trích xuất tất cả hình ảnh hoặc hình ảnh có loại cụ thể từ tài liệu, hãy làm theo các bước sau:
- Sử dụng phương pháp Document.get_child_nodes để chọn tất cả các nút Shape.
- Lặp lại thông qua các bộ sưu tập nút kết quả.
- Kiểm tra thuộc tính boolean Shape.has_image.
- Trích xuất dữ liệu hình ảnh bằng thuộc tính Shape.image_data.
- Lưu dữ liệu hình ảnh vào một tập tin.
Ví dụ mã sau đây cho thấy cách trích xuất hình ảnh từ tài liệu và lưu chúng dưới dạng tệp:
Bạn có thể tải xuống tệp mẫu của ví dụ này từ đây.
Cách chèn mã vạch trên mỗi trang của tài liệu
Ví dụ này minh họa cách bạn thêm các mã vạch giống nhau hoặc khác nhau trên tất cả hoặc các trang cụ thể của tài liệu Word. Không có cách trực tiếp để thêm mã vạch trên tất cả các trang của tài liệu nhưng bạn có thể sử dụng các phương thức move_to_section, move_to_header_footer và insert_image để di chuyển đến bất kỳ phần hoặc đầu trang/chân trang nào và chèn hình ảnh mã vạch như bạn có thể thấy trong đoạn mã sau.
Ví dụ về mã sau đây Chèn hình ảnh mã vạch trên mỗi trang của tài liệu.
Khóa tỷ lệ khung hình của hình ảnh
Tỷ lệ khung hình của hình dạng hình học là tỷ lệ kích thước của nó theo các kích thước khác nhau. Bạn có thể khóa tỷ lệ khung hình của hình ảnh bằng aspect_ratio_locked. Giá trị mặc định của tỷ lệ khung hình của hình dạng phụ thuộc vào ShapeType. Đó là True
cho ShapeType.IMAGE và False
cho các loại hình dạng khác.
Ví dụ mã sau đây cho thấy cách làm việc với tỷ lệ khung hình:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False
doc.save(docs_base.artifacts_dir+"WorkingWithImages.set_aspect_ratio_locked.doc")
Làm thế nào để có được giới hạn hình dạng thực tế theo điểm
Nếu bạn muốn hộp giới hạn thực tế của hình được hiển thị trên trang, bạn có thể đạt được điều này bằng cách sử dụng thuộc tính bounds_in_points.
Ví dụ mã sau đây cho thấy cách sử dụng thuộc tính này:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False
print("\nGets the actual bounds of the shape in points.")
rect = shape.get_shape_renderer().bounds_in_points
print(f"{rect.x}, {rect.y}, {rect.width}, {rect.height}")
Cắt hình ảnh
Việc cắt xén hình ảnh thường đề cập đến việc loại bỏ các phần bên ngoài không mong muốn của hình ảnh để giúp cải thiện khung hình. Nó cũng được sử dụng để loại bỏ một số phần của hình ảnh nhằm tăng sự tập trung vào một khu vực cụ thể.
Ví dụ về mã sau đây cho thấy cách đạt được điều này bằng Aspose.Words API:
# The path to the documents directory.
inputPath = docs_base.images_dir + "Logo.jpg"
outputPath = docs_base.artifacts_dir + "cropped_logo.jpg"
self.crop_image(inputPath,outputPath, 100, 90, 200, 200)
@staticmethod
def crop_image(inPath : str, outPath : str, left : int, top : int, width : int, height : int) :
doc = aw.Document();
builder = aw.DocumentBuilder(doc)
croppedImage = builder.insert_image(inPath)
src_width_points = croppedImage.width
src_height_points = croppedImage.height
croppedImage.width = aw.ConvertUtil.pixel_to_point(width)
croppedImage.height = aw.ConvertUtil.pixel_to_point(height)
widthRatio = croppedImage.width / src_width_points
heightRatio = croppedImage.height / src_height_points
if (widthRatio< 1) :
croppedImage.image_data.crop_right = 1 - widthRatio
if (heightRatio< 1) :
croppedImage.image_data.crop_bottom = 1 - heightRatio
leftToWidth = aw.ConvertUtil.pixel_to_point(left) / src_width_points
topToHeight = aw.ConvertUtil.pixel_to_point(top) / src_height_points
croppedImage.image_data.crop_left = leftToWidth
croppedImage.image_data.crop_right = croppedImage.image_data.crop_right - leftToWidth
croppedImage.image_data.crop_top = topToHeight
croppedImage.image_data.crop_bottom = croppedImage.image_data.crop_bottom - topToHeight
croppedImage.get_shape_renderer().save(outPath, aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG))
Lưu hình ảnh dưới dạng WMF
Aspose.Words cung cấp chức năng lưu tất cả hình ảnh có sẵn trong tài liệu sang định dạng WMF trong khi chuyển đổi DOCX sang RTF.
Ví dụ mã sau đây cho thấy cách lưu hình ảnh dưới dạng WMF với các tùy chọn lưu RTF: