Trabalhar com imagens

Trabalhar com imagens

Aspose.Cells FOSS for Java allows you to embed images directly into células da planilha e recuperar ou remover imagens existentes. Gestão através do PictureCollection expostos por cada um dos Estados-Membros. Worksheet, e cada um deles. Picture objeto fornece acesso aos dados de imagem, sua âncora posição, o tipo de imagem detectada e o seu tipo MIME.


Resumo geral

Cada folha de trabalho expõe as suas imagens através do Worksheet.getPictures(), que retorna um PictureCollection.Pode adicionar imagens de um byte . Array, um InputStream, ou um caminho de arquivo. A coleção fornece auxiliar métodos para a detecção do tipo de imagem a partir dos bytes brutos, resolvendo o ficheiro extensão a partir de dados de imagem e extensor de mapeamento para tipo de conteúdo MIME.


Acessar imagens numa planilha

Recuperar o PictureCollection via: Worksheet.getPictures().- Usar . PictureCollection.getCount() para determinar quantas fotografias estão presentes. As imagens individuais são acessíveis por índice baseado em zero através de: PictureCollection.get(index).


Adicionando uma imagem

Três sobrecargas de PictureCollection.add() são disponíveis, cada um dos quais tem uma Retornar o índice com base em zero da imagem recém-adicionada:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) de uma matriz byte
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) de um InputStream
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) de um caminho de arquivo
// 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);

Leitura de Propriedades da Imagem

Uma vez que você segurar um Picture referência, ler a posição da âncora;, Dados de imagem bruta, tipo de imagem detectada e tipo do conteúdo 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());
}

Detecção de tipo de imagem a partir de bytes cruos

Utilização: PictureCollection.detectImageType(data) para determinar o ImageType enum valor de uma matriz byte sem incorporá-lo primeiro.

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);

Remover uma imagem

Utilização: PictureCollection.removeAt(index) para apagar uma imagem por sua índice baseado em zero:

ws.getPictures().removeAt(0);

Dicas e melhores práticas

  • Utilize o add(..., imageData) sobrecarga quando você já tem os bytes na memória; use a sobrecarga de fluxo para evitar carregar arquivos grandes inteiramente.
  • Chama-me . PictureCollection.detectImageType(data) para validar a imagem. Formatar antes da incorporação.
  • As linhas e colunas de ancoragem são índices baseados em zero.
  • Picture.getName() Retorna um identificador interno, não o nome do ficheiro original.
  • As fotos são preservadas em XLSX ida e volta.

Problemas comuns

EmissãoCausa da morteCorreção
getCount() retorna 0 após adição.O fluxo foi encerrado antes de a adição ser concluída .Certifique-se de que o InputStream está aberto e legível.
ImageType.UNKNOWN devolvidoDados de imagem não suportados ou corrompidosVerifique se o arquivo é um PNG, JPEG, GIF, BMP ou TIFF válido
Posição da imagem parece errada.Índices de linhas/colunas incorretos.Utilize índices baseados em zero para todos os parâmetros de ancoragem.

FAQ

Que formatos de imagem são suportados para a incorporação?

A Comissão ImageType Enum abrange PNG, JPEG, GIF, BMP, TIFF e EMF. Outras Os formatos podem ser incorporados como dados binários, mas têm um ImageType de: UNKNOWN.

Como posso obter a extensão de arquivo de uma imagem embutida?

Chama-me . PictureCollection.extensionFromData(picture.getData()) com o imagem em bytes brutos.

Posso substituir um dado de imagem existente?

Sim, retira o… Picture via: get(index) E chama-me. setData(bytes).

Como é que encontro uma foto por nome?

Iterar sobre todas as imagens com getCount() e a) get(index) e comparar Picture.getName().

As imagens são preservadas quando salvas para outros formatos?

A preservação da imagem depende do formato alvo. XLSX de ida e volta é totalmente suportado.


Resumo de referência da API

Imagem:

Método de avaliaçãoTipo de devoluçãoDescrição:
getName()StringNome interno da imagem.
setName(name)voidIndica o nome interno.
getUpperLeftRow()intA linha zero da ancoragem superior esquerda.
setUpperLeftRow(row)voidColoca a linha de ancoragem superior esquerda.
getUpperLeftColumn()intColuna de base zero da âncora superior esquerda.
setUpperLeftColumn(col)voidColoca a coluna de ancoragem superior esquerda.
getLowerRightRow()intA linha zero da âncora inferior direita.
setLowerRightRow(row)voidColoca a linha de ancoragem inferior direita.
getLowerRightColumn()intColuna de base zero da âncora inferior direita.
setLowerRightColumn(col)voidColoca a coluna de ancoragem inferior direita.
getImageType()ImageTypeValor enum do formato de imagem detectado.
getData()byte[]Bytes de imagem bruta.
setData(data)voidSubstitui os bytes da imagem bruta.
getContentType()StringMIME tipo de conteúdo string.

PictureCollection

Método de avaliaçãoTipo de devoluçãoDescrição:
getCount()intNúmero de imagens na folha de cálculo.
get(index)PictureRetorna a imagem no índice baseado em zero.
add(...)intIncorpora uma imagem; retorna o seu índice baseado em zero.
removeAt(index)voidRemove a imagem no índice baseado em zero.
detectImageType(data)ImageTypeDetecta o formato da imagem a partir de bytes brutos.
extensionFromData(data)StringRetorna a extensão de arquivo para os dados da imagem.
contentTypeFromExtension(ext)StringRetorna o tipo MIME para uma extensão de arquivo.

Ver também:

 Português