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 arrayadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream)Từ InputStreamadd(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
| Issue | Cause | Fix Đặt |
|---|---|---|
getCount() 0 sau khi thêm | Stream đã bị đóng cửa trước khi add hoàn thành | Hãy chắc chắn rằng InputStream là mở và dễ đọc. |
ImageType.UNKNOWN trở lại | Dữ liệu hình ảnh không hỗ trợ hoặc bị hư hại | Kiểm tra tệp là PNG, JPEG, GIF, BMP hoặc TIFF có hiệu lực. |
| Hình ảnh hình trông sai | Mục/một chỉ số là sai | Sử 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
Picturequaget(index)và gọisetData(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() và 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
| Method | Loại Return | Description |
|---|---|---|
getName() | String | Tên nội bộ của bức tranh. |
setName(name) | void | Đặt tên nội bộ. |
getUpperLeftRow() | int | Dò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() | int | Mụ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() | int | Dò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() | int | Mụ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() | ImageType | Hì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) | void | Thay thế các byte hình ảnh nguyên chất. |
getContentType() | String | MIME Content Type string. |
PictureCollection
| Method | Loại Return | Description |
|---|---|---|
getCount() | int | Số lượng hình ảnh trên bảng tính. |
get(index) | Picture | Trả lại hình ảnh trên chỉ số dựa trên zero. |
add(...) | int | Nhúng một hình ảnh; trả về chỉ số dựa trên zero. |
removeAt(index) | void | Xóa hình ảnh trên chỉ số dựa trên zero. |
detectImageType(data) | ImageType | Phát hiện định dạng hình ảnh từ các byte nguyên. |
extensionFromData(data) | String | Trả lại phần mở rộng tệp cho dữ liệu hình ảnh. |
contentTypeFromExtension(ext) | String | Trở lại kiểu MIME cho một phần mở rộng tệp. |