Salvar imagem JPEG no banco como string (base64) e recuperar para exibição

Boa tarde Pessoal !

Preciso criar uma pequena aplicação que lê uma imagem jpeg em uma pasta local e salve-a no banco.
Porém, como tenho imagens grandes, ao invés de simplesmente salvar a a imagem direto no campo tipo blob/bytea, ou simplesmente gravar caminho e arquivo, preciso convertê-las em texto (base64) antes de gravar.
Quando o usuário consultar o cadastro, o sistema lê o campo no formato base64 gravado no banco, converte para imagem de volta e exibe no formulário.

Alguém saberia como posso fazer isso no ScriptCase, estou começando a usar e ainda não sei.

Grato.

Você vai ter que criar uma blank no scriptcase e adaptar este código:

$caminho=$this->Ini->path_imagens.'\';

$img = glob($caminho."*.{jpg,png,gif}", GLOB_BRACE);
$contador = count($img);

foreach ($img as $img) {
         $imagem='<a href=""><img src="'.$img.'" /></a>';
         // echo $imagem."<BR>"; Imagem Simples sem base64.

		 $img_file=$img;
		 // Ler o arquivo de imagem na pasta, converter para base64
         $imgData64 = base64_encode(file_get_contents($img_file)); // Essa variável pode gravar no MySQL.

		 
		// Parte Opcional só para mostrar a imagem codificada base64 
		// Formatar Para Mostrar no Navegador SRC:  data:{mime};base64,{data};
		$src = 'data: '.mime_content_type($img_file).';base64,'.$imgData64;
		// Aqui Mostramos ela já como BASE64
		echo '<img src="'.$src.'">';
}
1 Curtida

Em relação a esta dúvida, eu verifiquei depois que se gero um formulário já com o campo blob o Scriptcase já mostra a imagem, sem que eu faça nada !
Minha dúvida é como esta imagem está sendo gravada no banco (Postgres), esta conversão já é feita automaticamente ou não ?
Minha preocupação é o tamanho das imagens, que poderiam tornar o banco imenso, por isso iria usar a conversão para base64 antes de salvar, como fazia em minhas aplicações Delphi.

Ok, vamos fazer um ‘teste’ faça uma app formulário do SC e grave uma imagem pequena para teste no banco no campo BLOB, depois crie uma aplicação ‘Controle’, e tente listar essa imagem normal,
sem usar o ‘DECODE’.

Sem USAR ‘DECODE’:
CARREGAR IMAGEM A PARTIR DE CAMPO BLOB NA BASE DE DADOS

$_sql = " SELECT Foto"
. " FROM imagens"
. " WHERE id = ‘".[ID]."’";
sc_lookup(rs, $_sql);

if (isset({rs[0][0]}))
{
$varImg={rs[0][0]};
{img} = “”;
}
else {
{img} = ‘Sem Imagem’;
}

USANDO O ENCODE Depois de pegar os Dados BINÁRIOS no BLOB:
CARREGAR IMAGEM A PARTIR DE CAMPO BLOB NA BASE DE DADOS

$_sql = " SELECT Foto"
. " FROM imagens"
. " WHERE id = ‘".[ID]."’";
sc_lookup(rs, $_sql);

if (isset({rs[0][0]}))
{
$varImg=base64_encode({rs[0][0]});
{img} = “”;
}
else {
{img} = ‘Sem Imagem’;
}

Caso a imagem já estivesse codificada na base: você veria ela como exemplo: iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2 e
daria para guardar ela até em um Campo Longo Texto e nem precisaria ser Binário = BLOB.
https://exagon.wordpress.com/2014/11/19/convertendo-imagens-em-base64-em-5-linguagens-diferentes-php-c-java-pythonjavascript/