Estimados amigos.
Estoy desarrollando una aplicación en la cual utilizo campos bytea para almacenar imágenes (fotos).
La aplicación funciona bién, y almacena perfectamente las fotos, pero, dado que a veces los usuarios no son muy propensos a mantener el tamaño, y además, por una cuestión estética en las pantallas, decidí incorporar una función que redimensione las imágenes que sobrepasen determinadas dimensiones.
El problema es que al php (dentro del toba) no le gustan algunas funciones y, se interrumpe yendo a la página de inicio de la aplicación.
Les comento que esta rutina ya la he usado con éxito en otras aplicaciones fuera de Toba, por lo que me desorienta la situación. Tenemos el PHP 5, por lo que dichas funciones están soportadas.
A continuacón les transcribo a partir de que función no puedo seguir avanzando.
$imagen = imagecreatetruecolor($ancho, altura);
(‘altura’ es una constante predefinida.)
Si lo creen necesario, les copio toda la función de redimensionamiento.
por lo que lei de la documentacion de php aparentemente lo que podria estar pasandote es que no encuentre definida la funcion debido a que la version correcta de la libreria no esta instalada. O al menos eso es lo que entedi XD.
Depending on your PHP and GD versions this function is defined or not.
This function requires GD 2.0.1 or later (2.0.28 or later is recommended).
Por otro lado, descartando eso como posible problema… segun veo la funcion te devuelve un handler el cual luego despues exportarias a un archivo mediante alguna de las imageXXX (XXX = formato). Lo que me interesa saber es que error te esta tirando, en que directorio estas realizando la exportacion a archivo en disco (con algun ejemplo de la ruta que devuelve la funcion basta) y como lo estas usando con toba… si me pudieras pegar esa parte del codigo + el error estaria barbaro… no es necesaria la funcion de conversion :).
Estimado Richard, te agradezco tu atención.
Gracias a que consideraste descartado el problema de la GD (cosa que yo también hacía), se me ocurrió revisarlas y resultó que, si bien estaba instalada en el servidor donde dije que funcionaban, no lo estaba en el servidor que me pusieron (hace unos días nomás) para desarrollo.
Solucionado el inconveniente, demoré en responderte porque tuve otro que pude solucionar sin molestar más.
De todas manera, y al solo efecto de que quede en linea para cualquier colega que lo considere útil y no haya desarrollado algo similar, pongo en linea la solución que adopté para reducir una imágen conservando las proporciones.
Un cordial saludo.
[tr][td]
---- Detección de que se carga imágen y llamado a la función reductora.
---- normalmente el el evento grabar.
if (is_array($datos['b01foto'])):
//Se subio una imagen
$tam=getimagesize($datos['b01foto']['tmp_name']);
if($tam[0] > 200 or $tam[1] > 200):
$imagen=$this->cambiartam($datos['b01foto']['name'],$datos['b01foto']['tmp_name']);
//-- Se necesita el path fisico de un archivo temporal que va a contener la imagen
$temp_nombre = md5(uniqid(time()));
$temp_archivo = toba::proyecto()->get_www_temp($temp_nombre);
//-- Se pasa el contenido al archivo temporal
$temp_fp = fopen($temp_archivo['path'], 'wb');
fwrite($temp_fp,$imagen);
fclose($temp_fp);
$fp = fopen($temp_archivo['path'], 'rb');
$this->dep('bienes')->set_blob('b01foto', $fp);
else:
$fp = fopen($datos['b01foto']['tmp_name'], 'rb');
$this->dep('bienes')->set_blob('b01foto', $fp);
endif;
endif;
----- Función reductora.
//------
function cambiartam($nombre,$archivo)
{
define("altura",200); // altura de la imágen en pixeles
$tipos = array("jpg","jpeg", "pjpeg", "gif", "png");
$tmp=explode(".",$nombre);
switch(strtolower($tmp[1]))
{
case $tipos[0]:
case $tipos[1]:
case $tipos[2]:
$img=imagecreatefromjpeg($archivo);
break;
case $tipos[3]:
$img = imagecreatefromgif($archivo);
break;
case $tipos[4]:
$img=imagecreatefrompng($archivo);
break;
}
//-- redimensiono la imagen
$datos = getimagesize($archivo);
$proporcion = $datos[1]/altura;
$ancho = round($datos[0]/$proporcion);
$imagen = imagecreatetruecolor($ancho, altura);
imagecopyresampled($imagen, $img, 0, 0, 0, 0, $ancho, altura, $datos[0], $datos[1]);
ob_start();
switch(strtolower($tmp[1]))
{
case $tipos[0]:
case $tipos[1]:
case $tipos[2]:
imagejpeg($imagen);
break;
case $tipos[3]:
imagegif($imagen);
break;
case $tipos[4]:
imagepng($imagen);
break;
}
$imagen=ob_get_contents();
ob_end_clean();
return $imagen;
}