redimensionar imagem JPG no banco

olá!
tenho um campo do tipo IMAGEM (banco de Dados) e preciso redimensionar.
Já tentei no evento onValidate acessar a imagem que fica no TMP do scriptcase até o usuário clicar em atualizar, mas não consigo pois a imagem altera o nome original.
COMO FAÇO para antes do insert interceptar a imagem e fazer a alteração.

Faça um upload através de um campo em memória (virtual), após submeter o formulário, na onvalidatesucess, pegue a imagem (na pasta parametrizada na publicação) redimensione e salve-a manualmente no banco.

eu tentei mas apareceu a mensagem - Undefined variable: sKeepImage

Veja bem, vc deve estar usando algum código externo e não esta sabendo como usar.

estou usando o WideImage - http://wideimage.sourceforge.net/

// REDIMENSIONAR IMAGEM JÁ GRAVADA EM CAMPO BLOB

// Colocar nos Eventos OnAfter Insert e OnAfterUpdate:

/* Macro sc_lookup */

$_sql ="
SELECT
Foto
FROM
imagens
WHERE
ID = {ID}
";

sc_lookup(rs, $_sql);

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

$_MySQL_Blob=base64_decode({rs[0][0]}); // 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
      Foto = '$_MySQL_Blob'
   WHERE
       ID = {ID}
");

}

// REDIMENSIONAR IMAGEM JÁ GRAVADA EM CAMPO BLOB

// Colocar nos Eventos OnAfter Insert e OnAfterUpdate:

/* Macro sc_lookup */

$_sql ="
      SELECT
         Foto
      FROM
          imagens
      WHERE
          ID = {ID}
";

sc_lookup(rs, $_sql);

if (isset({rs[0][0]})) {
	
	$_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
	      Foto = '$_MySQL_Blob'
	   WHERE
	       ID = {ID}
	");
	
}	

Tem essas dicas interessantes também:

UPLOAD LIMITAR TAMANHO DO ARQUIVO ENVIADO:

Limitar tamanho arquivo UPLOAD (Pré Validação)

AUTOMATICO PELO SC:
O campo já existe no formulário, em “Aplicação > Configuração”
Há o item “Tamanho máximo do arquivo”.

MANUALMENTE PELO PHP (No evento > onApplicationInit)
// Checar:
echo ini_get(‘upload_max_filesize’).’
’;
// Configurar
ini_set( ‘upload_max_size’ , ‘2M’);
ini_set( ‘post_max_size’, ‘2M’);
ini_set( ‘max_execution_time’, ‘300’);

E como vc esta incluindo a biblioteca no Scriptcase?

lá pela biblioteca externa.
o esquisito é que ela faz a função de manipular a imagem, salvando a imagem redimensionada, mas apresenta essa mensagem
Undefined variable: sKeepImage

include(sc_url_library(‘prj’, ‘layout’, include/wideImage/wideImage.php"’ ));
e o código com essa biblioteca é super simples

$imagem = {minhafoto};
$resized = $image->resize(400, 300);
$img_final = $resized->asString(‘jpg’, 80);
{minhafoto} = $img_final ;

por que um simples
{foto_alun} = “…/_lib/img/grp__NM__bg__NM__FOTOALUNO1.png”; no onvalidate
dá uma mensagem de erro?

Cite o erro.

Que tipo de campo é {foto_alun}?

o campo {foto_alun} e do tipo imagem (banco de dados), eu usei esta forma para testar a adição de uma imagem via código, mas a mensagem de erro continua

vc não pode adicionar uma constante a um campo do tipo imagem.

quer exibir a imagem?

transforme o campo em label e atribua:

apesar que pelo nome da imagem que demonstra aqui essa não deve se encontrar nessa pasta _lib/img a não ser que vc tenha copiado manualmente esse arquivo para a referida pasta

Haroldo e Jailton, vc´s tem algum exemplo prático de tratamento de imagem antes de inserir no banco, já vi que por esse caminho eu não vou conseguir.

jailton nessa linha
$_MySQL_Blob=base64_decode($_MySQL_Blob);

qual a origem do $_MySQL_Blob se ele nunca foi referenciado?

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

$_MySQL_Blob=base64_decode({rs[0][0]});

É que eu tinha colocado já um código base64 nos meus testes, ai tentei colocar ele aqui no POST, e não deu espaço, ai eu removi e esqueci, de acertar esse detalhe.

Jailton. infelizmente não deu.
imagecreatefromstring(): Empty string or invalid image
imagesx() expects parameter 1 to be resource, boolean given
imagesy() expects parameter 1 to be resource, boolean given
Division by zero
imagecreatetruecolor(): Invalid image dimensions
imagecopyresized() expects parameter 1 to be resource, boolean given
imagejpeg() expects parameter 1 to be resource, boolean given
imagedestroy() expects parameter 1 to be resource, boolean given

Eu modifiquei o código retirando o base64_decode da linha
$_MySQL_Blob=base64_decode({rs[0][0]});
ele passa tudo mas não salva corretamente provavelmente salva um codigo corrompido.

muito obrigado pela atenção e se vc puder identificar o problema fico grato

Tenta exibir a imagem que tá gravada neste campo com isso, para ver se ela esta ok, pode ter corrompido a imagem nos outros testes.

/* Macro sc_lookup */

$_sql ="
SELECT
Foto
FROM
imagens
WHERE
ID = {ID}
";

sc_lookup(rs, $_sql);

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

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

echo "<img border=0 src='data:image/jpeg;base64,$_MySQL_Blob'>"; // Comentar esta linha depois...

}

Jailton,

Ele deseja upar uma imagem, diminuir seu tamanho e salvar no banco.

E não esta sabendo usar a classe externa ao sc para realização essa operação.

Foi o que entendi.

Haroldo tá certo, eu não entendo como o SC dá mensagem de erro sendo que a função redimensionou e salvou corretamente,
mas se com a biblioteca eu não consigo, qual seria a forma de execução adotada por vocês?

é a biblioteca mesmo que eu utilizo. Coloco ela com o biblioteca externa no sc