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