PHP - Novato con duda :)

   
Vista:
Imágen de perfil de Rick

Novato con duda :)

Publicado por Rick (13 intervenciones) el 10/01/2014 16:40:08
Hola buenas a todos(as), me presento, mi nombre es Rick y soy de Chile y la verdad es que llevo hace algún tiempo visitando el sitio pues me estoy adentrando en PHP de a poco y quería enviar mi primera consulta que tengo la cual es sencilla de explicar, pero no se si de realizar. Mi consulta es la siguiente.

En PHP.net encontré imagecopyresized y lo que yo quiero hacer es crear el código para que tome una imagen, le haga crop y guarde la nueva imagen con compresión... ¿me explico?

Espero que puedan guiar un poco a este novatillo, pero que ama -desde ya- la programación.

Saludos a todos(as) y espero su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Novato con duda :)

Publicado por xve (5520 intervenciones) el 10/01/2014 18:22:58
Hola Rick, no entiendo que quieres decir con le hago crop?? eso que es??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Novato con duda :)

Publicado por GATO (3 intervenciones) el 10/01/2014 18:25:46
crop = cortar, pero lo q tu quieres es hacer resize = cambiar de tamano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

Novato con duda :)

Publicado por Rick (13 intervenciones) el 10/01/2014 21:51:06
Si, es justamente lo que quiero hacer... es tomar una foto (por ejemplo una de perfil) y que cambié el tamaño por ejemplo a 160x160 por poner un ejemplo y que la nueva imagen la guarde comprimida en jpg... me entienden? Saludos y gracias chicos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Novato con duda :)

Publicado por xve (5520 intervenciones) el 11/01/2014 08:18:52
Hola Rick, aqui tienes un ejemplo de como hacerlo:
http://www.lawebdelprogramador.com/codigo/PHP/1051-Redimensionar_imagen.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rick

Novato con duda :)

Publicado por Rick (13 intervenciones) el 12/01/2014 16:52:18
Ok, veré el ejemplo para ver si puedo redimensionar la imagen... luego te comento xve... saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 12/01/2014 17:11:51
He visto el documento y algo estoy entendiendo -recuerden que soy novato :(- y lo que no se que es, es que dice que necesita de la librería GD... ¿quien me puede orientar con eso?

Saludos y mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 12/01/2014 20:19:37
La librería GD en teoría viene con todas las versiones de PHP... dependerá de la instalación que tengas, que la tengas que activar o instalar.

Como has instalado el PHP?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 13/01/2014 19:31:10
He instalado PHP con Xampp y he creado una carpeta dentro de htdocs para ahi leer mi codigo. He visto algo el codigo, pero aun no se llamar bien los archivos porque no se leer bien el codigo. Sé de variables y ello, pero entender el codigo del ejemplo me lía un poco. Además mi idea es tras redimensionar la nueva imagen, que la guarde comprimida... aplicar samplecopy y aplicar compress... en teoria, pero aun no se leerlo bien... ¿me puedes ayudar un poco a entenderlo? al menos en la lectura.

Gracias por la ayuda... me ha encantado :D

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 13/01/2014 19:32:17
Si, si, sin ningún problema... coméntame las lineas que tienes duda, y intento explicarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 13/01/2014 21:08:14
Mira esto es lo que entiendo:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$origen="img/imagen.jpg";
$destino="img/nuevaimagen.jpg";
$destino_temporal=tempnam("tmp/","tmp"); //acá que es (("tmp/","tmp")??????
redimensionar_jpeg($origen, $destino_temporal, 300, 350, 100);
 
// guardamos la imagen
$fp=fopen($destino,"w"); //acá se abre la imagen de destino en modo de escritura no?
fputs($fp,fread(fopen($destino_temporal,"r"),filesize($destino_temporal))); //acá me estalla la cabeza xD
fclose($fp);
 
// mostramos la imagen
echo "<img src='img/nuevaimagen.jpg'>";

Y de aqui en adelante veo chino xD... osea, algo veo, pero me confudo muchísimo..... :(

1
2
3
4
5
6
7
8
9
10
11
12
13
function redimensionar_jpeg($img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad)
{
	// crear una imagen desde el original 
	$img = ImageCreateFromJPEG($img_original);
	// crear una imagen nueva 
	$thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura);
	// redimensiona la imagen original copiandola en la imagen 
	ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));
 	// guardar la nueva imagen redimensionada donde indicia $img_nueva 
	ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
	ImageDestroy($img);
}
?>


Sé que es tedioso explicar, pero como recien vengo entrando y quiero crear una funcion que alguien suba una foto cualquiera, se redimensione asi como al tamaño de una foto de perfil y que esté comprimida en jpg..... o es muy complicado lo que pienso? aparte de que no entiendo eso ultimo que me parece el infierno mismo xd
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 14/01/2014 08:02:21
Hola Rick, pero si cada linea esta comentada y te explica lo que hace... es una función que tiene que recibir ciertos parámetros y devuelve una imagen redimensionada con los valores que recibe.

En la variable $destino_temporal, tienes la ubicación de la imagen redimensionada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 14/01/2014 19:49:58
Xve, muchas gracias por la ayuda. De verdad que ahora lo veo todo más claro. Lo que sucede es que tiendo a pensar que como el código lo escribió otra persona, siento que no es original que llegue y escriba todo tal cual. Obviamente el nombre de las variables las cambio por una cosa de facilidad, pero a lo mejor estoy en un error con eeso del código.

Un última cosa.... una vez que tenga la imagen y pueda hacer el proceso... sabes como podría comprimirla al guardarla?

Ojala pudiera conversar esto, pero vamos... es un foro y me han ayudado muchísimo... :)

Saludos y espero tu valerosa ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 15/01/2014 07:37:13
Hola Ricky, en la variable $img_nueva_calidad determinas la calidad de la imagen, y por consiguiente su tamaño...
http://www.php.net/manual/es/function.imagejpeg.php

Me agrega que te haya servido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 15/01/2014 18:28:42
Le echaré un vistazo y te diré que tal va.

Siendo sinceros, recien veré como probar el código, porque como soy novato ni eso sé muy bien xD. En mi caso, es casi lo mismo, mira:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
 
 
$origen = "img/imagen.jpg";
$destino = "imgnueva/nueva.jpg";
$dest_temp = tempnam ("tmp/","tmp");
 
redimensionar_jpeg($origen, $dest_temp, 160, 160, 100);
 
//se guarda la imagen
$fp=fopen($destino, "w");
fputs($fp, fread(fopen($dest_temp, "r"), filesize($dest_temp)));
fclose($fp);
 
 
 
//se muestra la imagen 
	echo "<img src='imgnueva/nueva.jpg'>";
 
 
function redimensionar_jpeg($img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad)
{
 
	//creo una imagen desde la original
	$img = imagecreatefromjpeg($img_original);
 
	//creo la nueva imagen
	$thumb = imagecreatetruecolor($imagen_nueva_anchura, $imagen_nueva_altura);
 
	//redimensiono la imagen original copiandola en la imagen
	imagecopyresized($thumb, $img, 0, 0, 0, 0, $imagen_nueva_anchura, $img_nueva_alura, imagesx($img), imagesy($img))
 
	//guardo la imagen redimensionada donde indica $img_nueva
	imagejpeg($thumb, $img_nueva, $img_nueva_calidad);
	imagedestroy($img);
 
}
?>


Entonces me imagino que deberái llamarla desde un archivo que cree llamado redimensionar_jpeg.php, entonces sería algo como:

1
2
3
4
5
6
7
8
<html>
<head>
<title>
</title>
</head>
<body>
<img src='redimensionar_jpeg.php?imagen=img/imagen.jpg'></img>
</body>

¿o no es así?

Saludos y gracias como siempre amigo :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 15/01/2014 19:59:17
Hola Rick, para este ejemplo, no estas utilizando compresión, ya que pasas el valor 100 para la calidad...

El código tal lo tienes creo que no te funcionara...
Primeramente tienes que ejecutar el código de php, y luego al llamar a la imagen, tienes que ser algo así:
1
<img src="imgnueva/nueva.jpg">

Puedes añadir el código php, con un include o simplemente ponerlo encima de la página html...

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 16/01/2014 21:01:36
Ok, en este preciso instante probaré todo. Dame unos minutos.


PD: Xve, cuando dices que no funcionará el código... ¿es porque tengo un error en la escritura o en que no he creado un archivo aparte para llamarlo?

Porque por ejemplo, cree un archivo index.php con la línea <img src="imgnueva/nueva.jpg"> y el navegador me arroja una imagen de 18px x 20px... ????? y no entiendo o caigo en lo básico.

Disculpa si jodo mucho con el tema :(

Gracias como siempre Xve ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 16/01/2014 21:44:53
Hola Rick, el tema esta, en que primero tienes que redimensionar la imagen en el servidor (php) y luego llamarla desde el navegador (html), por lo que antes de crear el código php, tienes que redimensionar la imagen y luego llamarla desde html.

Este código lo he probado y funciona!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<html>
<head>
</head>
 
<body>
<?php
$origen = "img3.jpg";
$destino = "nueva.jpg";
$dest_temp = tempnam ("tmp/","tmp");
 
redimensionar_jpeg($origen, $dest_temp, 160, 160, 100);
 
//se guarda la imagen
$fp=fopen($destino, "w");
fputs($fp, fread(fopen($dest_temp, "r"), filesize($dest_temp)));
fclose($fp);
 
//se muestra la imagen 
echo "<img src='nueva.jpg'>";
 
 
function redimensionar_jpeg($img_original, $img_nueva, $imagen_nueva_anchura, $imagen_nueva_altura, $img_nueva_calidad)
{
 
    //creo una imagen desde la original
    $img = imagecreatefromjpeg($img_original);
 
    //creo la nueva imagen
    $thumb = imagecreatetruecolor($imagen_nueva_anchura, $imagen_nueva_altura);
 
    //redimensiono la imagen original copiandola en la imagen
    imagecopyresized($thumb, $img, 0, 0, 0, 0, $imagen_nueva_anchura, $imagen_nueva_altura, imagesx($img), imagesy($img));
 
    //guardo la imagen redimensionada donde indica $img_nueva
    imagejpeg($thumb, $img_nueva, $img_nueva_calidad);
    imagedestroy($img);
 
}
?>
</body>
</html>

Tenias varios errores en las variables de las funciones, y una linea mal cerrada.
Revisa las rutas de las imágenes... yo he puesto unas para probarlo y funciona perfectamente!!!

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 16/01/2014 23:08:13
Ok probaré inmediatamente para ver que tal me va. Y analizaré las líneas de inmediato, porque quiero aprender bien. Espero que estés por acá en los siguientes minutos y te comento que tal me va.

Gracias como siempre Xve ;)

PD: Sé que esto no debería decirlo pero... no tienes Skype, Hangout o algo por el estilo? Así podría decirte en que es lo que me lio y aprender de una vez -llevo meses, como cuatro tratando- y si pudieras sería maravilloso.


EDITO: El código funciona perfectamente si coloca una imagen -obviamente- llamada img3 en el mismo directorio del código. Ahora bien, lo que quería hacer, era dejar el código en un archivo llamado por ejemplo "redimensionar.php" y llamarlo desde un index... además, aún no sé bien como implementar la parte de la compresión de la imagen.... aun tienes Skype o Hangout? :')

EDITO 2: Ya he llamado el código de redimensión de imagen desde un index, ahora la cosa solo queda colocarle la compresión a la imagen...... en eso ahora pienso... manejas algo de eso Xve? Vaya que me haz ayudado... realmente. Te lo reagradezco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

librería GD

Publicado por Rick (13 intervenciones) el 21/01/2014 16:32:51
Hola de nuevo... tengo otra duda.

El código funciona y redimensiona la imagen, pero pierde su calidad... existe alguna manera de hacer lo mismo sin perdida? Pues noto en las fotos la perdida y no se que puedo escribir para solucionar ello o si debo escribirlo de otra forma...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

librería GD

Publicado por xve (5520 intervenciones) el 21/01/2014 18:03:24
Hola Rick, en teoría, si al crear la imagen imagejpeg la calidad es 100, no debería de perder calidad siempre y cuando se redimensione a proporción la anchura y la altura.

Nosotros lo hemos utilizado mucho y nunca hemos tenido problemas de calidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rick

calidad de compresion

Publicado por Rick (13 intervenciones) el 22/01/2014 17:32:20
Es que yo pensaba en algo como samplecopy y compress, porque el codigo funciona y a pesar de estar la calidad en 100%, por ejemplo en dimensiones de 160x160 se nota la perdida inmediatamente... ¿qué sucede?

Si quieres subo alguna imagen de un antes y después...


Saludos Xve... gracias maestro :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rick

calidad de compresion

Publicado por Rick (13 intervenciones) el 22/01/2014 20:01:21
Siento que repostee, pero un amigo me dijo respecto al script:

"las primeras 3 variables
no pueden estar independientes
si yo llamo la funcion redimencionar
que necesito
de ese archivo como envio la direccion cargada
me entiendes?"

Y quedé plop... ¿tiene razón? ¿o debería escribirlas de otra manera? A todo esto... aun no doy con que pierda calidad.

Saludos.

EDITO: Mi amigo dice: "lo que necesitas crear es un grupo de funciones y declarar el tipo d evariables todo esto dentro de una clase
ese es el segundo error
el tema importante es que realize un crop para mantener la proporcion
por tanto debes manejar ancho, alto y escala en funciones dependientes"

Esto es considerando si se llama de un index.php.... include... ya saben.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

calidad de compresion

Publicado por xve (5520 intervenciones) el 22/01/2014 22:31:00
Hola Rick, nos puedes mostrar las imágenes? la sin comprimir y la comprimida, que intentare pasarlo por la función haber si pierde calidad...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

calidad de compresion

Publicado por xve (5520 intervenciones) el 22/01/2014 22:35:46
Hola Rick, sobre lo que te comento tu compañero, las variables no tienen porque estar definidas en la función, pueden estarlo o no.

Si estoy de acuerdo de ponerlo todo dentro de una clase... yo casi todos mis desarrollos están en clases, ya que es mucho mas sencillo de reutilizar en otros proyectos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar