Imagem em base 64 no componente p-galleria

Assim funciona:

this.images = [
        {
          previewImageSrc:
            'https://www.primefaces.org/primeng/showcase/assets/showcase/images/galleria/galleria9.jpg',
          thumbnailImageSrc:
            'https://www.primefaces.org/primeng/showcase/assets/showcase/images/galleria/galleria9s.jpg'
          alt: 'Description for Image 1',
          title: 'Title 1',
        },
        {
          previewImageSrc:
            'https://www.primefaces.org/primeng/showcase/assets/showcase/images/galleria/galleria10.jpg'
          thumbnailImageSrc:
            'https://www.primefaces.org/primeng/showcase/assets/showcase/images/galleria/galleria10s.jp'
          alt: 'Description for Image 2',
          title: 'Title 2',
        },
      ];

Assim não funciona:

httpReturn.forEach((element: any) => {
        this.images.push({
          previewImageSrc:
            'data:' + element.contentType + ';base64,' + element.arquivo,
          thumbnailImageSrc:
            'data:' + element.contentType + ';base64,' + element.arquivo,
        });
      });

O que não funciona a imagem está em base64.

Não achei exemplos deste componente usando imagens com base64.

O que pode ser feito ?

Isso é só uma estrutura de dados. Depende de como os dados estão sendo usados no HTML.

1 curtida

Não entendi.

Alguma ajuda por aqui ???

Dá uma pesquisada

https://www.google.com/search?q=primeng+p-galleria+base64

1 curtida

Eu pesquisei, mas não desta maneira. Valeu e vou testar.

Fiz assim:

Código TS

httpReturn.forEach((element: any) => {
        this.images.push({
          source: 'data:' + element.contentType + ';base64,' + element.arquivo,
        });
      });

Código HTML

<p-galleria [value]="images" [numVisible]="10"> </p-galleria>

Mas não aparece nada.

image

O que pode ser ?

Depende do que vem nas suas variáveis. Imprime no console a string completa e compare se fica igual ao exemplo da pesquisa:

1 curtida

Vem assim:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArEAAANqCAIAAAAVNoQiAAD//0lEQVR42uy9CbxlV1klfub5nDu/92quSkgIBJJIIERIAIkQCEhLGNJMigrSTtAKotCoiK0IatMOYAOCijIKiA1EQBMCYQxhSMhQSSBJperVm+5w7pnn81/7fpVrtd3+tVs00175/W6du8++557h5q317f19a4sCBwcHBwcHB4cgiPf0CXBwcHBwcHDcK8A1AQcHBwcHBwcD1wQcHBwcHBwcDFwTcHBwcHBwcDBwTcDBwcHBwcHBwDUBBwcHBwcHBwPXBBwcHBwcHBwMXBNwcHBwcHBwMHBNwMHBwcHBwcHANQEHBwcHBwcHA9cEHBwcHBwcHAxcE3BwcHBwcHAwcE3AwcHBwcHBwcA1AQc …

`

QUando coloquei o retorno em uma variável e mostrei no html: funcionou:

<img src="{{ imagem }}" />

Então muda pra ser por url.

1 curtida

Mas como faço isso, pois a estrutura da imagem tem que estar no banco de dados

vc ja tentou um base64 pequeno? pra ver se realmente ta funcionando (se o problema não são suas imgs)?

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
1 curtida

Então, não deve ser minha imagem, pois aqui, ela imprime na tela: Imagem em base 64 no componente p-galleria.

E o usuário faz o upload delas.

mas ali em cima imprimiu a url dessa img, não é?

1 curtida

A base 64 da imagem que veio do backend, conforme imagem:

ué, se ta funcionando com o base64, qual o problema então?

1 curtida

O problema, que não está funcionando no componente p-galleria, conforme está no título.

Ao invés de ficar convertendo pra base64 em string, retorna o binário em byte[]. Assim sua requisição/url vai retornar direto o binário da imagem para o browser interpretar diretamente sem conversões.

1 curtida

Então fiz o exemplo que colocou aqui.

Ele retorna a URL, Mas não funciona, porque não sei como chamar esta url.

image

TypeScript

<p-galleria [value]="images" [numVisible]="10"> </p-galleria>

httpReturn.forEach((imagem: any) => {
        this.images.push({
          source: imagem.url,
        });
});

Pois entendi que a URL que ele monta não é a imagem em si. e sim que chama um endpoint.

Quando eu chamo este endpoint, retorna isso:

Aonde estou errando ?