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 18: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 20: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 10: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 18: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 04:11:29.

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