Foros del Web » Programando para Internet » PHP »

Redimensionar imagenes con php

Estas en el tema de Redimensionar imagenes con php en el foro de PHP en Foros del Web. Hola: He visto algunos post parecidos al mío, pero no me han servido, así quisiera pedir ayuda para resolver un problema a la hora de ...
  #1 (permalink)  
Antiguo 22/01/2010, 13:22
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Redimensionar imagenes con php

Hola:
He visto algunos post parecidos al mío, pero no me han servido, así quisiera pedir ayuda para resolver un problema a la hora de redimensionar imágenes. Tengo bastante poca idea de php, así que suplico que me respondan en lenguaje para inexpertos.
Se trata de rediminsionar cualquiera de los tres formatos de imagen más comunes y llamarlos desde cualquier página extrayendo el nombre del archivo de la base de datos.

Tengo un script que redimensiona imágenes jpg

<?php
// ancho y alto predeterminados
$ancho=500;
$alto=500;

$nombre=$_GET['imagen']; // recibo el nombre de imagen


$tipo=substr($nombre,-3); // extraemos extension

$im1=imagecreatefromjpeg($nombre); // creamos imagen en memoria

$tam = GetImageSize($nombre); // analizamos el tamaño del original

$ancho_imagen = $tam[0];
$alto_imagen = $tam[1];

$imagepro=1;
$imageproph=1;

//if ($ancho_imagen > $ancho) // si el ancho del original es mayor que lo que queremos
$imagepro=$ancho/$ancho_imagen;

//if ($alto_imagen > $alto)
$imageproph=$alto/$alto_imagen;

if ( $alto_imagen>$ancho_imagen)
$imagepro=$imageproph;

$imagen_hor_tam= ceil($ancho_imagen*$imagepro) ; // redondea hacia arriba
$imagen_ver_tam=ceil($alto_imagen*$imagepro) ;

//$imagen_hor_tam= 100 ;
//$imagen_ver_tam=100 ;

$im=imagecreatetruecolor($imagen_hor_tam, $imagen_ver_tam);
//ImageInterlace($im,1);
imagecopyresized($im, $im1, 0, 0, 0, 0, $imagen_hor_tam, $imagen_ver_tam, ImageSX($im1), ImageSY($im1));

Header("Content-type: image/jpg,png,gif");Imagejpeg($im);

ImageDestroy($im);
?>


Y a este código lo llamo desde cualquier página con el siguiente código

<?php
$nombre2=$row_plantilla['foto'];
$nombre2="miniatura1.php?imagen=foto1/" . $nombre2;

?>
<img src="<?php echo $nombre2 ?> "/>

de modo que redimensiona cualquier imagen jpg que tenga en la base de datos, se llame como se llame, puesto que extrae el nombre del campo "foto" del juego de registros "plantilla"

¿Como puedo hacer que esto funcione para cualquier tipo de imagen (png, gif y jpg)? Es decir, que si meto una imagen png en la base de datos, la reconozca también y la capte incluso con su transparencia.

Mil gracias a quien me saque de la duda.

Por cierto, para quienes les venga vien este script, funciona muy bien con jpg.
  #2 (permalink)  
Antiguo 22/01/2010, 13:30
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Hola, jrcomposer.

Traslado el tema a una sección que encaja mejor con tu pregunta.
Tema trasladado desde la sección de Web general.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 22/01/2010, 13:36
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Redimensionar imagenes con php

Si quieres redimensionar imagenes, revisa el la seccion de aportes de este foro, hay cosas muy utiles.

Suerte
__________________
HV Studio
Diseño y desarrollo web
  #4 (permalink)  
Antiguo 22/01/2010, 20:33
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 9 meses
Puntos: 27
Respuesta: Redimensionar imagenes con php

Proba con esta clase. Que es muy sencilla de usar.
http://blog.unijimpe.net/generar-thumbnails-con-php/

Espero que te sea util.
  #5 (permalink)  
Antiguo 23/01/2010, 05:36
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Redimensionar imagenes con php

¿Donde está la sección de aportes?
  #6 (permalink)  
Antiguo 23/01/2010, 07:28
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Redimensionar imagenes con php

En la 1er pagina del foro de php, arriba de todo

http://www.forosdelweb.com/f18/aport...as-php-569025/
__________________
HV Studio
Diseño y desarrollo web
  #7 (permalink)  
Antiguo 24/01/2010, 00:11
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Redimensionar imagenes con php

Muchas gracias a todos, a ver si consigo dar con la solución
  #8 (permalink)  
Antiguo 24/01/2010, 07:56
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Redimensionar imagenes con php

Pues no consigo dar con la solucion.
He encontrado algunas clases, pero cuando hago el include me salen errores, y he encontrado algún script que lo hace pero queda el png de poca calidad y con el fondo negro en lugar de transparente.
Heintentado ver una función para fondos transparentes, pero ya me pierdo porque sé muy poco php.
Si alguien sabe de algo apropiado y de como ponerlo, se lo agradecería en el alma.
Saludos
  #9 (permalink)  
Antiguo 24/01/2010, 08:08
 
Fecha de Ingreso: enero-2010
Mensajes: 152
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Redimensionar imagenes con php

Lo unico que te pued recomedar es estudiar el manual de funciones de PHP.

http://mx.php.net/manual/en/ref.image.php

Practicamente lo que tienes que hacer es:

Crear una nueva imagen con las dimensiones deseadas.

Identificar el formato de la imagen que vas a redimensionar

insertar la imagen antigua en la imagen vieja con las dimensiones deseadas

Guardar la imagen nueva y borrar la imagen vieja.
  #10 (permalink)  
Antiguo 24/01/2010, 15:38
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Redimensionar imagenes con php

He encontrado este código pero no consigo hacerlo funcionar. Es que como he comentado antes, me hago un lío con el php.
Código PHP:
Ver original
  1. <?
  2. function redimensionar_imagen($imagen, $nombre_imagen_asociada)
  3. {
  4. //indicamos el directorio donde se van a colgar las imágenes
  5.  
  6. $directorio = 'logotipo/' ;
  7. //establecemos los límites de ancho y alto
  8.  
  9.  
  10. $nuevo_ancho = 600 ;
  11. $nuevo_alto = 600 ;
  12.  
  13. //Recojo información de la imágen
  14.  
  15. $info_imagen = getimagesize($imagen);
  16. $alto = $info_imagen[1];
  17. $ancho = $info_imagen[0];
  18. $tipo_imagen = $info_imagen[2];
  19.  
  20. //Determino las nuevas medidas en función de los límites
  21.  
  22. if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
  23. {
  24. if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
  25. {
  26. $nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ;
  27. }
  28. else
  29. {
  30. $nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);
  31. }
  32. }
  33. else //si la imagen es más pequeña que los límites la dejo igual.
  34. {
  35. $nuevo_alto = $alto;
  36. $nuevo_ancho = $ancho;
  37. }
  38.  
  39. // dependiendo del tipo de imagen tengo que usar diferentes funciones
  40.  
  41. switch ($tipo_imagen) {
  42. case 1: //si es gif …
  43. $imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
  44. $imagen_vieja = imagecreatefromgif($imagen);
  45. //cambio de tamaño…
  46. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  47. if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  48. break;
  49.  
  50. case 2: //si es jpeg …
  51.  
  52. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  53. $imagen_vieja = imagecreatefromjpeg($imagen);
  54. //cambio de tamaño…
  55. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  56. if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  57. break;
  58.  
  59. case 3: //si es png …
  60.  
  61. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  62. $imagen_vieja = imagecreatefrompng($imagen);
  63. //cambio de tamaño…
  64.  
  65. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  66. if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  67. break;
  68. }
  69. return true; //si todo ha ido bien devuelve true
  70.  
  71.  
  72. } ;
  73.  
  74.  
  75. //indicamos el directorio donde se van a colgar las imágenes
  76.  
  77. $directorio = './' ;
  78. //establecemos los límites de ancho y alto
  79.  
  80.  
  81. $nuevo_ancho = 150 ;
  82. $nuevo_alto = 150 ;
  83.  
  84. //Recojo información de la imágen
  85.  
  86. $info_imagen = getimagesize("logotipo/logotipo.png");
  87. $alto = $info_imagen[1];
  88. $ancho = $info_imagen[0];
  89. $tipo_imagen = $info_imagen[2];
  90.  
  91. //Determino las nuevas medidas en función de los límites
  92.  
  93. if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
  94. {
  95. if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
  96. {
  97. $nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ;
  98. }
  99. else
  100. {
  101. $nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);
  102. }
  103. }
  104. else //si la imagen es más pequeña que los límites la dejo igual.
  105.  
  106. {
  107. $nuevo_alto = $alto;
  108. $nuevo_ancho = $ancho;
  109. }
  110.  
  111. // dependiendo del tipo de imagen tengo que usar diferentes funciones
  112. switch ($tipo_imagen) {
  113. case 1: //si es gif …
  114. $imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
  115. $imagen_vieja = imagecreatefromgif($imagen);
  116. //cambio de tamaño…
  117. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  118. if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  119. break;
  120.  
  121. case 2: //si es jpeg …
  122. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  123. $imagen_vieja = imagecreatefromjpeg($imagen);
  124. //cambio de tamaño…
  125. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  126. if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  127. break;
  128.  
  129. case 3: //si es png …
  130. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  131. $imagen_vieja = imagecreatefrompng($imagen);
  132. //cambio de tamaño…
  133. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  134. if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  135. break;
  136. }
  137. return true; //si todo ha ido bien devuelve true
  138. ?>
  139.  
  140. <?
  141. function redimensionar_imagen($imagen, $nombre_imagen_asociada)
  142. {
  143. //indicamos el directorio donde se van a colgar las imágenes
  144.  
  145. $directorio = 'logotipo/' ;
  146. //establecemos los límites de ancho y alto
  147.  
  148.  
  149. $nuevo_ancho = 600 ;
  150. $nuevo_alto = 600 ;
  151.  
  152. //Recojo información de la imágen
  153.  
  154. $info_imagen = getimagesize($imagen);
  155. $alto = $info_imagen[1];
  156. $ancho = $info_imagen[0];
  157. $tipo_imagen = $info_imagen[2];
  158.  
  159. //Determino las nuevas medidas en función de los límites
  160.  
  161. if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
  162. {
  163. if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
  164. {
  165. $nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ;
  166. }
  167. else
  168. {
  169. $nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);
  170. }
  171. }
  172. else //si la imagen es más pequeña que los límites la dejo igual.
  173. {
  174. $nuevo_alto = $alto;
  175. $nuevo_ancho = $ancho;
  176. }
  177.  
  178. // dependiendo del tipo de imagen tengo que usar diferentes funciones
  179.  
  180. switch ($tipo_imagen) {
  181. case 1: //si es gif …
  182. $imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
  183. $imagen_vieja = imagecreatefromgif($imagen);
  184. //cambio de tamaño…
  185. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  186. if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  187. break;
  188.  
  189. case 2: //si es jpeg …
  190.  
  191. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  192. $imagen_vieja = imagecreatefromjpeg($imagen);
  193. //cambio de tamaño…
  194. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  195. if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  196. break;
  197.  
  198. case 3: //si es png …
  199.  
  200. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  201. $imagen_vieja = imagecreatefrompng($imagen);
  202. //cambio de tamaño…
  203.  
  204. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  205. if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  206. break;
  207. }
  208. return true; //si todo ha ido bien devuelve true
  209.  
  210.  
  211. } ;
  212.  
  213.  
  214. //indicamos el directorio donde se van a colgar las imágenes
  215.  
  216. $directorio = './' ;
  217. //establecemos los límites de ancho y alto
  218.  
  219.  
  220. $nuevo_ancho = 150 ;
  221. $nuevo_alto = 150 ;
  222.  
  223. //Recojo información de la imágen
  224.  
  225. $info_imagen = getimagesize("logotipo/logotipo.png");
  226. $alto = $info_imagen[1];
  227. $ancho = $info_imagen[0];
  228. $tipo_imagen = $info_imagen[2];
  229.  
  230. //Determino las nuevas medidas en función de los límites
  231.  
  232. if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
  233. {
  234. if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
  235. {
  236. $nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ;
  237. }
  238. else
  239. {
  240. $nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);
  241. }
  242. }
  243. else //si la imagen es más pequeña que los límites la dejo igual.
  244.  
  245. {
  246. $nuevo_alto = $alto;
  247. $nuevo_ancho = $ancho;
  248. }
  249.  
  250. // dependiendo del tipo de imagen tengo que usar diferentes funciones
  251. switch ($tipo_imagen) {
  252. case 1: //si es gif …
  253. $imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
  254. $imagen_vieja = imagecreatefromgif($imagen);
  255. //cambio de tamaño…
  256. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  257. if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  258. break;
  259.  
  260. case 2: //si es jpeg …
  261. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  262. $imagen_vieja = imagecreatefromjpeg($imagen);
  263. //cambio de tamaño…
  264. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  265. if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  266. break;
  267.  
  268. case 3: //si es png …
  269. $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  270. $imagen_vieja = imagecreatefrompng($imagen);
  271. //cambio de tamaño…
  272. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  273. if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
  274. break;
  275. }
  276. return true; //si todo ha ido bien devuelve true
  277. ?>
¿Cómo lo tengo que llamar? Es decir, si tengo una imagen que se carga desde la base de datos, del campo de nombre logotipo:

Código PHP:
Ver original
  1. <img src="logotipo/<?php echo $row_plantilla['logotipo']; ?>" width="150" height="100" />

¿Qué tendría que cambiar para que funcione?
Gracias y disculpad por mi ignorancia.

Etiquetas: imagenes, redimensionar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:05.