Làm việc với hình ảnh

Làm việc với hình ảnh

Aspose.Cells FOSS for Java allows you to embed images directly into Các ô bảng tính và lấy hoặc xóa hình ảnh hiện có. quản lý thông qua các PictureCollection được trình bày bởi mỗi Worksheet, và Mỗi người Picture object cung cấp quyền truy cập vào dữ liệu hình ảnh, anchor của nó vị trí, loại hình ảnh được phát hiện và kiểu nội dung MIME của nó.


Overview

Mỗi bảng tính trình bày hình ảnh của mình thông qua Worksheet.getPictures(), Quay lại A PictureCollection.Bạn có thể thêm hình ảnh từ một byte. Array, một InputStream, hoặc một file path. bộ sưu tập cung cấp trợ giúp phương pháp để phát hiện loại hình từ các byte nguyên, giải quyết tệp mở rộng từ dữ liệu hình ảnh, và bản đồ mở dài đến loại nội dung MIME.


Truy cập hình ảnh trên một bảng tính

Retrieve các PictureCollection qua Worksheet.getPictures().Sử dụng PictureCollection.getCount() Để xác định có bao nhiêu hình ảnh hiện diện. Hình ảnh cá nhân có thể truy cập bằng chỉ số dựa trên không thông qua PictureCollection.get(index).


Thêm một bức ảnh

3 Lượng tải của PictureCollection.add() Có sẵn, mỗi trả về chỉ số dựa trên không của hình ảnh mới được thêm vào:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) Từ một byte array
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) Từ InputStream
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) Từ một file path
// Embed an image from bytes into cells A1:C5
byte[] imgData = Files.readAllBytes(Paths.get("logo.png"));
int idx = ws.getPictures().add(0, 0, 4, 2, imgData);

Đọc hình ảnh thuộc tính

Khi bạn giữ một Picture tham khảo, đọc vị trí anchor của nó, dữ liệu hình ảnh nguyên, loại hình được phát hiện và loại nội dung MIME:

PictureCollection pics = ws.getPictures();
for (int i = 0; i < pics.getCount(); i++) {
    Picture p = pics.get(i);
    System.out.printf("Name=%s type=%s anchor=[%d,%d]-[%d,%d]%n",
        p.getName(), p.getImageType(),
        p.getUpperLeftRow(), p.getUpperLeftColumn(),
        p.getLowerRightRow(), p.getLowerRightColumn());
}

Chẩn đoán hình ảnh từ Raw Bytes

Sử dụng PictureCollection.detectImageType(data) Để xác định các ImageType giá trị enum của một byte array mà không bao gồm nó trước.

PictureCollection pics = ws.getPictures();
byte[] data = Files.readAllBytes(Paths.get("chart.png"));
ImageType type = pics.detectImageType(data);
String ext  = pics.extensionFromData(data);
String mime = pics.contentTypeFromExtension(ext);
System.out.printf("type=%s ext=%s mime=%s%n", type, ext, mime);

xóa một hình ảnh

Sử dụng PictureCollection.removeAt(index) để xóa một bức ảnh bằng cách Chỉ số dựa trên zero:

ws.getPictures().removeAt(0);

Mẹo và Thực hành Tốt nhất

  • Sử dụng The add(..., imageData) quá tải khi bạn đã có các byte trong bộ nhớ; sử dụng quá tải dòng để tránh tải các tập tin lớn hoàn toàn.
  • Call PictureCollection.detectImageType(data) để xác nhận hình ảnh định dạng trước khi kết hợp.
  • Các hàng và cột Anchor là chỉ số dựa trên zero.
  • Picture.getName() trả lại một bộ định danh nội bộ, không phải tên file ban đầu.
  • Hình ảnh được lưu trữ trên XLSX vòng.

Các vấn đề thường gặp

IssueCauseFix Đặt
getCount() 0 sau khi thêmStream đã bị đóng cửa trước khi add hoàn thànhHãy chắc chắn rằng InputStream là mở và dễ đọc.
ImageType.UNKNOWN trở lạiDữ liệu hình ảnh không hỗ trợ hoặc bị hư hạiKiểm tra tệp là PNG, JPEG, GIF, BMP hoặc TIFF có hiệu lực.
Hình ảnh hình trông saiMục/một chỉ số là saiSử dụng chỉ số dựa trên zero cho tất cả các thông số anchor

FAQ

Các định dạng hình ảnh nào được hỗ trợ để tích hợp?

Các ImageType enum bao gồm PNG, JPEG, GIF, BMP, TIFF và EMF. định dạng có thể được kết hợp như dữ liệu nhị phân nhưng có một ImageType của UNKNOWN.

Làm thế nào để tôi có được file extension của một hình ảnh nhúng?

Call PictureCollection.extensionFromData(picture.getData()) Với The Hình ảnh nguyên byte.

Tôi có thể thay thế dữ liệu hình ảnh hiện tại không?

  • Có. lấy lại Picture qua get(index) và gọi setData(bytes).

Làm thế nào để tìm một bức ảnh theo tên?

Tải về tất cả các hình ảnh với getCount()get(index) So sánh Picture.getName().

Những hình ảnh được lưu trữ khi lưu vào các định dạng khác?

Bảo tồn hình ảnh phụ thuộc vào định dạng mục tiêu. XLSX vòng tròn được hỗ trợ đầy đủ.


Tóm tắt Tham chiếu API

Picture

MethodLoại ReturnDescription
getName()StringTên nội bộ của bức tranh.
setName(name)voidĐặt tên nội bộ.
getUpperLeftRow()intDòng dựa trên zero của anchor phía bên trái.
setUpperLeftRow(row)voidĐặt hàng Anchor phía trên bên trái.
getUpperLeftColumn()intMục dựa trên zero của anchor phía trên bên trái.
setUpperLeftColumn(col)voidĐặt cột anchor phía trên bên trái.
getLowerRightRow()intDòng dựa trên zero của anchor dưới bên phải.
setLowerRightRow(row)voidĐặt hàng anchor dưới bên phải.
getLowerRightColumn()intMục dựa trên zero của anchor dưới bên phải.
setLowerRightColumn(col)voidĐặt cột anchor bên dưới phải.
getImageType()ImageTypeHình ảnh được phát hiện định dạng enum giá trị.
getData()byte[]Hình ảnh nguyên chất byte.
setData(data)voidThay thế các byte hình ảnh nguyên chất.
getContentType()StringMIME Content Type string.

PictureCollection

MethodLoại ReturnDescription
getCount()intSố lượng hình ảnh trên bảng tính.
get(index)PictureTrả lại hình ảnh trên chỉ số dựa trên zero.
add(...)intNhúng một hình ảnh; trả về chỉ số dựa trên zero.
removeAt(index)voidXóa hình ảnh trên chỉ số dựa trên zero.
detectImageType(data)ImageTypePhát hiện định dạng hình ảnh từ các byte nguyên.
extensionFromData(data)StringTrả lại phần mở rộng tệp cho dữ liệu hình ảnh.
contentTypeFromExtension(ext)StringTrở lại kiểu MIME cho một phần mở rộng tệp.

See Also

 Tiếng Việt