Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Tratamiento de imagen BLOB y redimensionado. (https://www.clubdelphi.com/foros/showthread.php?t=59913)

papulo 12-09-2008 17:42:47

Tratamiento de imagen BLOB y redimensionado.
 
Hola gente,

hoy traigo un nuevo problema, bastante interesante creo yo, relacionado con firebird, imagenes en campos BLOB y el tratarlas antes de mostrarlas.

Básicamente tengo este código que funciona a la perfección:
Código PHP:

<?php 
//imagen.php
/* Mandando las cabeceras de la imagen */ 
//Header("Content-type: image/jpg"); 
 
/* Verificando la existencia de la imagen */ 
$query=("SELECT LAIMAGEN
                FROM PICTURES_JPG
                WHERE p.PICTURE_NAME='M010001'"
); 
 
$connection ibase_pconnect ('1.1.1.1:picturesdb''sysdba''masterkey')or die("Couldn't connect to database!"); 
 
$sql $query//Insertamos la consulta que queremos realizar 
 
$consulta ibase_query($connection$sql); 
$data ibase_fetch_object ($consulta);

ibase_blob_echo($data->PICTURE);

Que funciona chachi de la muerte.

La cuestión es la siguiente, estoy haciendo una API que permite cargar esas imágenes remotamente, pero "pesan" un poco y me gustaría poder rebajarles el tamaño, amén de redimensionarlas de forma proporcional, antes de enviarlas al navegador.

¿El problema?

Básicamente es que no tengo ni idea de como abordar el tema, las imágenes con los campos BLOB de Firebird no acaban de ser una combinación cómoda.

¿Como abordo los distintos problemas?

Espero no estar preguntando algo trivial.

¡Saludos a todos!

roman 12-09-2008 19:31:34

Yo comenzaría explorando las posibilidades de la biblioteca GD para PHP. De la lista (enorme) de funciones, parecen aplicar éstas:

La primera te serviría para crear un objeto GD a artir del campo BLOB. Supongo que para ello te servirán ibase_blob_open e ibase_blob_get

La segunda la usaría para crear la vista en miniatura, que es la que mandarías al navegador.

Buscando en el manual, puede verse en uno de los comentarios un ejemplo con MySQL.

// Saludos

papulo 13-09-2008 09:05:07

Gracias por la información, en cuanto tenga algo montado y funcionando, lo copiaré aquí para que si alguien mas tiene dudas sepa donde está la solución.

Saludos.

papulo 18-09-2008 17:26:31

Lo prometido es deuda, aquí va la solución:
Código PHP:

//Habremos hecho la query para capturar el blob antes.
$consulta ibase_query($connection$sql); 
$data ibase_fetch_object ($consulta);
$blob_data ibase_blob_info($data->PICTURE);
$blob_hndl ibase_blob_open($data->PICTURE);
$blob_imagen ibase_blob_get($blob_hndl$blob_data[0]); 

$size 150;  // Tamaño de la mayor propocion de la nueva imagen
$imagen imagecreatefromstring($blob_imagen);

$ancho_original imagesx($imagen);
$alto_original imagesy($imagen);

if(
$ancho_original>$alto_original){
    
$new_w $size;
    
$new_h abs($alto_original*$size/$ancho_original);
}else{
    
$new_h $size;
    
$new_w abs($ancho_original*$size/$alto_original);
    }

$miniatura imagecreatetruecolor($new_w,$new_h);

imagecopyresized($miniatura,$imagen,0,0,0,0,$new_w,$new_h,$ancho_original,$alto_original);
imagejpeg($miniatura); 

Y por supuesto, 100000 gracias a Roman, de veras.

Saludos y espero que ayude a mas gente.


La franja horaria es GMT +2. Ahora son las 19:36:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi