recuperar informação de campo para variavel

boa tarde pessoal,

estou desde sexta-feira pesquisando e testando de todas as maneiras (menos a correta obviamente) e me cansei:

Vou explicar mais detalhadamente, pra facilitar:

  1. tenho uma tabela no banco de dados mysql com alguns campos. Um deles é chamado “arquivo”, do tipo longblob, e o outro {miniatura}, de mesmo tipo.

  2. no scriptcase tem a grid e um form.

  3. no form o campo {arquivo} é tipo imagem (banco de dados), para armazenar a imagem diretamente no banco.

  4. o campo {miniatura} é tipo imagem (banco de dados), para armazenar a imagem redimensionada.

  5. no evento onBeforeInsert tenho o seguinte código: (em parte, ok, apenas um resumo para nao enrolar muito)

    // cria arquivo para variavel

    $myImage1 = {arquivo}; // este é o campo a que me refiro acima.
    $myImage = imagecreatefromstring($myImage1); // AQUI ACHO QUE A VARIAVEL NAO RECEBE O CONTEUDO

    // Pega o tamanho da imagem e proporção de resize
    //Pega o “ratio” para sempre redimensionar na proporção
    //Faz o calculo de proporção pela largura ou altura
    //Criamos uma base de imagem na nova dimensão
    //Geramos a imagem
    @imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);

    //Geramos um thumb redimensionado e cropado
    $thumb = @imagecreatetruecolor($thumbnail_width, $thumbnail_height);

    //limpamos a memoria usada

    {miniatura}=$thumb; // <<<<--------- AQUI ELA DEVE RECEBER A IMAGEM REDIMENSIONADA DIRETAMENTE EM MEMORIA.

  6. meu maior problema: não consigo passar o dito conteúdo para a variável. O objetivo é trabalhar esse conteúdo. Quero reduzir o tamanho da imagem antes de gravá-la e, se for o caso, salvar em outro campo.

No forum tem um exemplo mas com imagens fora do banco. Necessito armazenar dentro do banco. As rotinas estão prontas, EXCETO essa inconveniente dor de inteligencia.

**obs: o campo {miniatura} será eliminado depois, já que o proprio sc o cria dinamicamente. Estou mantendo-o apenas para testar se salva o {arquivo} e a copia redimensionada de {miniatura}. O problema é que trabalhar diretamente o campo {arquivo} não funciona. Tentei com base_encode64, etc. Literalmente fiz dezenas de tentativas desde sexta-feira.

agradeço o auxilio dos colegas.

se faltou explicação, eu explico.

Pode parecer simples demais, mas já tentou converter os dados oriundos da base de dados para base64 (ou decodificá-los)?

ex.: $myImage1 = base64_encode({arquivo});
ex2.: $myImage1 = base64_decode({arquivo});

De qualquer maneira, estou abrindo uma aplicação aqui para tentar fazer o mesmo processo. Quando eu conseguir um resultado interessante, posto aqui.

testei sim, metade das dezenas de vezes… mais uma.

retorna assim:

CODIGO:
$myImage1 = base64_decode({arquivo});
$myImage = imagecreatefromstring($myImage1);

RETORNO:
ERRO
imagecreatefromstring(): Empty string or invalid image

*{arquivo} tem conteudo, porque isso ele salva no mysql.

Abaixo coloco o fonte da rotina no onBeforeInsert. Como ninguem respondeu até agora, me resta pensar que é por falta de explicação de minha parte. Com a rotina abaixo e as informações na abertura deste post, creio haja informações suficientes para os colegas fazerem algum teste, caso possam auxiliar.

AGRADEÇO DE ANTEMAO.

$thumbnail_width=‘100’;
$thumbnail_height=‘100’;

// cria arquivo para variavel
$myImage1 = base64_decode({arquivo});   //  <<<<---  PEGA IMAGEM DO CAMPO DO FORM - AQUI É O MAIOR PROBLEMA
$myImage = imagecreatefromstring($myImage1);  //  <<<<---  GERA IMAGEM EM MEMORIA

// Pega o tamanho da imagem e proporção de resize
$width_orig = imagesx($myImage);
$height_orig = imagesy($myImage);

//Pega o "ratio" para sempre redimensionar na proporção
$ratio_orig = $width_orig/$height_orig;

//Faz o calculo de proporção pela largura ou altura
if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
   $new_height = $thumbnail_width/$ratio_orig;
   $new_width = $thumbnail_width;
} else {
   $new_width = $thumbnail_height*$ratio_orig;
   $new_height = $thumbnail_height;
}

//Pegamos o ponto central da imagem
$x_mid = $new_width/2; 
$y_mid = $new_height/2;

//Criamos uma base de imagem na nova dimensão
$process = @imagecreatetruecolor(round($new_width), round($new_height));

//Geramos a imagem
@imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);

//Geramos um thumb redimensionado e cropado
$thumb = @imagecreatetruecolor($thumbnail_width, $thumbnail_height);
@imagecopyresampled($thumb, $process, 0, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
 
//limpamos a memoria usada

// imagedestroy($process);
// imagedestroy($myImage);

//retorna o thumb

{miniatura}=$thumb; // <<<<— ATRIBUO A NOVA IMAGEM REDIMENSIONADA A OUTRO CAMPO BLOB (DEPOIS DE FUNCIONAL ELIMINA-SE O OUTRO CAMPO)

Talvez te ajude…

http://www.scriptcase.com.br/forum/index.php/topic,5032.msg21657.html#msg21657
http://www.scriptcase.com.br/forum/index.php?topic=1904.msg6705#msg6705