그림 작업
그림 작업
Aspose.Cells FOSS for Java은(는) 워크시트 셀에 이미지를 직접 삽입하고 기존 그림을 검색하거나 제거할 수 있게 합니다. 그림은 각 Worksheet이(가) 노출하는 PictureCollection을 통해 관리되며, 각 Picture 객체는 이미지 데이터, 앵커 위치, 감지된 이미지 유형 및 MIME 콘텐츠 유형에 대한 접근을 제공합니다.
개요
각 워크시트는 Worksheet.getPictures()을 통해 그림을 노출하며, 이는 PictureCollection을 반환합니다. 바이트 배열, InputStream, 또는 파일 경로에서 그림을 추가할 수 있습니다. 컬렉션은 원시 바이트에서 이미지 유형을 감지하고, 이미지 데이터에서 파일 확장자를 확인하며, 확장자를 MIME 콘텐츠 유형에 매핑하는 도우미 메서드를 제공합니다.
워크시트에서 그림에 접근하기
Worksheet.getPictures()을 통해 PictureCollection을 가져옵니다. PictureCollection.getCount()을 사용하여 현재 존재하는 그림 수를 확인합니다. 개별 그림은 PictureCollection.get(index)을 통해 0부터 시작하는 인덱스로 접근할 수 있습니다.
그림 추가하기
PictureCollection.add()의 세 가지 오버로드가 제공되며, 각각 새로 추가된 그림의 0부터 시작하는 인덱스를 반환합니다:
add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData)를 바이트 배열에서add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream)를 InputStream에서add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName)를 파일 경로에서
// 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);그림 속성 읽기
한 번 Picture 참조를 보유하면, 해당 앵커 위치, 원시 이미지 데이터, 감지된 이미지 유형 및 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());
}원시 바이트에서 이미지 유형 감지
PictureCollection.detectImageType(data)를 사용하여 바이트 배열을 먼저 삽입하지 않고 ImageType 열거형 값을 결정하세요.
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);그림 제거
제로 기반 인덱스로 그림을 삭제하려면 PictureCollection.removeAt(index)를 사용하십시오:
ws.getPictures().removeAt(0);팁 및 모범 사례
- 메모리에 바이트가 이미 있는 경우
add(..., imageData)오버로드를 사용하고, 큰 파일을 전체 로드하는 것을 피하려면 스트림 오버로드를 사용하십시오. - 삽입하기 전에 이미지 형식을 검증하려면
PictureCollection.detectImageType(data)를 호출하십시오. - 앵커 행과 열은 제로 기반 인덱스입니다.
Picture.getName()는 원본 파일 이름이 아닌 내부 식별자를 반환합니다.- XLSX 왕복 과정에서 그림이 보존됩니다.
일반적인 문제
| 문제 | 원인 | 해결책 |
|---|---|---|
getCount()는 추가 후 0을 반환합니다 | 스트림이 추가가 완료되기 전에 닫혔습니다 | InputStream가 열려 있고 읽을 수 있는지 확인하십시오 |
ImageType.UNKNOWN가 반환되었습니다 | 지원되지 않거나 손상된 이미지 데이터 | 파일이 유효한 PNG, JPEG, GIF, BMP 또는 TIFF인지 확인하십시오 |
| 그림 위치가 잘못된 것 같습니다 | 행/열 인덱스가 올바르지 않습니다 | 모든 앵커 매개변수에 대해 0부터 시작하는 인덱스를 사용하십시오 |
FAQ
임베딩을 위해 지원되는 이미지 형식은 무엇인가요?
ImageType 열거형은 PNG, JPEG, GIF, BMP, TIFF 및 EMF를 포함합니다. 다른 형식은 바이너리 데이터로 임베드될 수 있지만 ImageType은 UNKNOWN입니다.
임베드된 사진의 파일 확장자를 어떻게 얻나요?
그림의 원시 바이트와 함께 PictureCollection.extensionFromData(picture.getData())을 호출하십시오.
기존 사진 이미지 데이터를 교체할 수 있나요?
예. get(index)을 통해 Picture을 가져온 다음 setData(bytes)를 호출하십시오.
이름으로 사진을 찾는 방법은?
모든 그림을 getCount()와 get(index)으로 순회하고 Picture.getName()를 비교합니다.
그림을 다른 형식으로 저장할 때 보존되나요?
그림 보존은 대상 형식에 따라 달라집니다. XLSX 라운드트립은 완전히 지원됩니다.
API Reference 요약
Picture
| 메서드 | 반환 타입 | 설명 |
|---|---|---|
getName() | String | 그림의 내부 이름입니다. |
setName(name) | void | 내부 이름을 설정합니다. |
getUpperLeftRow() | int | 좌상단 앵커의 0 기반 행. |
setUpperLeftRow(row) | void | 왼쪽 위 앵커 행을 설정합니다. |
getUpperLeftColumn() | int | 좌측 상단 앵커의 0 기반 열. |
setUpperLeftColumn(col) | void | 왼쪽 위 앵커 열을 설정합니다. |
getLowerRightRow() | int | 우측 하단 앵커의 0 기반 행. |
setLowerRightRow(row) | void | 오른쪽 하단 앵커 행을 설정합니다. |
getLowerRightColumn() | int | 오른쪽 아래 앵커의 0 기반 열. |
setLowerRightColumn(col) | void | 오른쪽 하단 앵커 열을 설정합니다. |
getImageType() | ImageType | 감지된 이미지 형식 enum 값. |
getData() | byte[] | 원시 이미지 바이트. |
setData(data) | void | 원시 이미지 바이트를 교체합니다. |
getContentType() | String | MIME 콘텐츠 유형 문자열. |
PictureCollection
| 메서드 | 반환 타입 | 설명 |
|---|---|---|
getCount() | int | 워크시트에 있는 그림 수. |
get(index) | Picture | 0부터 시작하는 인덱스의 그림을 반환합니다. |
add(...) | int | 이미지를 삽입하고; 그 0부터 시작하는 인덱스를 반환합니다. |
removeAt(index) | void | 제로 기반 인덱스에 있는 사진을 제거합니다. |
detectImageType(data) | ImageType | 원시 바이트에서 이미지 형식을 감지합니다. |
extensionFromData(data) | String | 이미지 데이터에 대한 파일 확장자를 반환합니다. |
contentTypeFromExtension(ext) | String | 파일 확장자에 대한 MIME 유형을 반환합니다. |