그림 작업

그림 작업

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를 포함합니다. 다른 형식은 바이너리 데이터로 임베드될 수 있지만 ImageTypeUNKNOWN입니다.

임베드된 사진의 파일 확장자를 어떻게 얻나요?

그림의 원시 바이트와 함께 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()StringMIME 콘텐츠 유형 문자열.

PictureCollection

메서드반환 타입설명
getCount()int워크시트에 있는 그림 수.
get(index)Picture0부터 시작하는 인덱스의 그림을 반환합니다.
add(...)int이미지를 삽입하고; 그 0부터 시작하는 인덱스를 반환합니다.
removeAt(index)void제로 기반 인덱스에 있는 사진을 제거합니다.
detectImageType(data)ImageType원시 바이트에서 이미지 형식을 감지합니다.
extensionFromData(data)String이미지 데이터에 대한 파일 확장자를 반환합니다.
contentTypeFromExtension(ext)String파일 확장자에 대한 MIME 유형을 반환합니다.

참조

 한국어