redimensionar imagem JPG no banco

eu faço assim também.
favor haroldo, me ajude nessa missão.

Jailton, você encontrou solução para este erro? Tentei a sugestão do seu código, dá sempre o mesmo erro, e quanto atualiza no banco (blob) fica corrompido.

eu consegui redimensionar a imagem, consigo visualizar a través do mesmo código para ter certeza que tudo funcionou, porém as miniaturas no meu campo mult upload não aparece mais. Segue meu código:

$_sql =“SELECT imagem, idImagem FROM imagens
WHERE idPropriedade = {idPropriedade} AND rzimagem = 0”;

sc_lookup(rs, $_sql);

$contador = count({rs});
for ($b=0; $b < $contador; ++$b){

if (isset({rs[$b][0]})) {
    
	$_MySQL_Blob = {rs[$b][0]};
	$idImagem = {rs[$b][1]};
	
	echo "<img border=0 src='data:image/jpeg;base64,$_MySQL_Blob'>";
	
	//$_MySQL_Blob=base64_decode($_MySQL_Blob); // Decodificamos para código de imagem pura no PHP
	
	$_size = 150; // Novo Tamanho da Imagem desejada
	$_src = imagecreatefromstring($_MySQL_Blob);
	$_width = imagesx($_src);
	$_height = imagesy($_src);
	$_aspect_ratio = $_height/$_width;

	// Aqui tentamos manter a proporção da imagem original
	if ($_width <= $_size) {
		$_new_w = $_width;
		$_new_h = $_height;
	} else {
		$_new_w = $_size;
		$_new_h = abs($_new_w * $_aspect_ratio);
	}

	$_Imagem = imagecreatetruecolor($_new_w,$_new_h);
	imagecopyresized($_Imagem,$_src,0,0,0,0,$_new_w,$_new_h,$_width,$_height);


	// Criamos um buffer para o PHP não jogar a imagem nova na tela, ele vai esconder
	ob_start ( );
	imagejpeg($_Imagem);
	imagedestroy($_Imagem); // Liberamos a memória
	$_MySQL_Blob = base64_encode(ob_get_contents()); // Guardamos na variável a imagem que o PHP criou.
	ob_end_clean ( );
	// Finalizamos o Buffer

	// Aqui verificamos a imagem gerada que vamos guardar na base de dados, se esta tudo certo.
	echo "<img border=0 src='data:image/jpeg;base64,$_MySQL_Blob'>"; // Comentar esta linha depois...

// Gravamos a nova imagem redimensionada na tabela
sc_exec_sql("
UPDATE 
	imagens
SET
	imagem = '$_MySQL_Blob',
	rzimagem = 1
WHERE
	idImagem = $idImagem
"); 

}	

}

alguém pode me ajudar?

Qual o erro que ocorre?

Corrompe a visualização na miniatura do campo multuploads do form

Uma coisa é: A imagem está corrompida no banco de dados ou o SC não está conseguindo carregar a imagem após o upload?

As diretivas do PHP atendem aos recursos utilizados para a redefinição da imagem?

Tentou usar long_blob?

Precisa ver se o SC usa addslashes antes de salvar imagem no banco.

Esta subindo imagem diferente de jpeg? Tipo PNG, GIF? Se sim tem que salvar no banco o tipo de imagem que lá está salvo para na hora de regerar a imagem utilize o comando referente ao tipo de imagem ( imagejpeg($_Imagem); <== Gera Jpeg apenas ).

Sim, no banco já uso longBlob, a imagem é um jpg, é tanto que eu consigo visualizá-la antes de redimensionar, em seguida consigo visualizá-la novamente, só após eu executo o update… Qnd eu tento rodar meu código para apenas visualizá-la, também consigo ver a imagem que foi atualizada… mas la no meu form onde tenho as miniaturas das imagens do meu campo multuploads não aparece.

E se chamar blank para e evitar o serviço depois volta para o formulário?

Eu estou dando o resize antes de salvar.
Para mim também estava dano erro “Undefined variable: sKeepImage”
onBeforeInsert - OK, mas no onBeforeUpdate dava esse erro.

Obrigado @Jailton pelo código, funcionou bem ao mudar a variável dessa forma:

$_size = 1028; // Resize para a largura máxima desejada.
$_src = imagecreatefromstring($this->foto);
$_width = imagesx($_src);
$_height = imagesy($_src);
$_aspect_ratio = $_height/$_width;

if ($_width <= $_size) { // Para manter a proporção da imagem original
	$_new_w = $_width;
	$_new_h = $_height;
} else {
	$_new_w = $_size;
	$_new_h = abs($_new_w * $_aspect_ratio);
}

$_Imagem = imagecreatetruecolor($_new_w,$_new_h);
imagecopyresized($_Imagem,$_src,0,0,0,0,$_new_w,$_new_h,$_width,$_height);

ob_start ( ); // Buffer para o PHP não jogar a imagem nova na tela, ele vai esconder
imagejpeg($_Imagem);
imagedestroy($_Imagem); // Liberamos a memória
$this->foto = ob_get_contents(); // Guardamos na variável a imagem que o PHP criou.
ob_end_clean ( ); // Finalizamos o Buffer
1 Curtida

boa tarde, alguém conseguiu resolver o erro do código do Jaiton? o problema está em gravar de volta no banco de dados, ele grava em base64, e não consigo fazer diferente, alguém poderia ajudar? Obrigado

Consegui! Depois de 3 dias, tentando, achei a solucao.

// REDIMENSIONAR IMAGEM JÁ GRAVADA EM CAMPO BLOB

// Colocar nos Eventos OnAfter Insert e OnAfterUpdate:

/* Macro sc_lookup */

$_sql ="
SELECT
imagem
FROM
produto
WHERE
ID = {ID}
";

sc_lookup(rs, $_sql);

if (isset({rs[0][0]})) {

$_MySQL_Blob= {rs[0][0]};

$_size = 150; // Novo Tamanho da Imagem desejada
$_src = imagecreatefromstring($_MySQL_Blob);
$_width = imagesx($_src);
$_height = imagesy($_src);
$_aspect_ratio = $_height/$_width;

// Aqui tentamos manter a proporção da imagem original
if ($_width <= $_size) {
	$_new_w = $_width;
	$_new_h = $_height;
} else {
	$_new_w = $_size;
	$_new_h = abs($_new_w * $_aspect_ratio);
}

$_Imagem = imagecreatetruecolor($_new_w,$_new_h);
imagecopyresized($_Imagem,$_src,0,0,0,0,$_new_w,$_new_h,$_width,$_height);


// Criamos um buffer para o PHP não jogar a imagem nova na tela, ele vai esconder
ob_start ( );
imagejpeg($_Imagem);
imagedestroy($_Imagem); // Liberamos a memória
$_MySQL_Blob = base64_encode(ob_get_contents()); // Guardamos na variável a imagem que o PHP criou.
ob_end_clean ( );
// Finalizamos o Buffer

// Aqui verificamos a imagem gerada que vamos guardar na base de dados, se esta tudo certo.
echo "<img border=0 src='data:image/jpeg;base64,$_MySQL_Blob'>"; // Comentar esta linha depois...

$_MySQL_Blob = base64_decode($_MySQL_Blob);



$dados1 = addslashes($_MySQL_Blob);
sc_exec_sql("
   UPDATE 
      produto
   SET
      imagem = '$dados1'
   WHERE
       ID = {ID}
");

}

3 Curtidas