Foros del Web » Programando para Internet » PHP »

Modificar Imagenes en Masa

Estas en el tema de Modificar Imagenes en Masa en el foro de PHP en Foros del Web. Hola. Esta es la historia: Mi "jefe" me ecomendo sakar de un cd "digital vision" imagenes para que ocupemos en las presentaciones para la empresa. ...
  #1 (permalink)  
Antiguo 15/11/2002, 10:24
Avatar de AngelRoyo  
Fecha de Ingreso: marzo-2002
Ubicación: Santiago de Chile
Mensajes: 207
Antigüedad: 15 años, 8 meses
Puntos: 5
Modificar Imagenes en Masa

Hola.

Esta es la historia: Mi "jefe" me ecomendo sakar de un cd "digital vision" imagenes para que ocupemos en las presentaciones para la empresa. Vaya que me he elejido 173 imagenes y las envie en una carpeta zipeada. La cosa es que cada imagen al final tiene un recatngulo negro que dice "Copyright Digital Vision", pues chanfle. ¿ Cómo le quito esa mierda de rectangulo? , se me vino a la mente el Firework y tendria que editar cada imagen y modificarla :-p . Pues mi "jefe" cree que así es así como las modificare, jejeje pero no sabe la menuda cosa que es PHP .

En mi carpeta pruebas tengo:
script: cut_img.php
carpeta: cortadas
carpeta: empresa

Este es el codigo:

Código PHP:

/*
    CORTAR "$cutpx" DE UNA IMAGEN
    ANGEL ROYO 2002
   */

function tiempo(){
 list(
$ms,$s)=explode(" ",microtime());
 
$t=($ms $s);
 return 
$t/* Retorna el Tiempo en Segundos */
}/* Esta funcion se la agrege más nada para ver lo que se demora la PC */

function image_cut($src,$destino,$cutpx){
  
$size getimagesize($src);/* Propiedades de la imagen */
  
$im=imagecreatefromjpeg($src); /*Tomo la imagen origen */
  
$img=imagecreate($size[0],$size[1]-$cutpx);/*[0] ANCHO, [1] ALTO, me creo una CANVAS, algo similar que en Firework*/
  
imagecopyresized($img$im0000$size[0],$size[1]-$cutpx$size[0], $size[1]-$cutpx); /* Copio en mi CANVAS la imagen $im en la dimensión que deseo */
  
ImageJPEG($img,$destino,85); /*Exporto la CANVAS a JPG con 85% */
  
ImageDestroy($img); /* La Borro de la Cache */

/* El procedimiento es similar a usar un editor de imagenes */
}



      
$d=dir("empresa/"); /*Directorio con las imagenes de origen*/
      
      
$t0=tiempo();/* Opcional */
      
echo "Handle: ".$d->handle."<br/>\n";/* Opcional */
      
echo "Path: ".$d->path."<br/>\n";/* Opcional */
      
      
while($archivo=$d->read()) {/* Comienzo a leer la carpeta definida en dir */
          
if (eregi(".+\.jpe?g$",$archivo)){
              
/* ES JPG o JPEG, por lo tanto aplicamos la funcion image_cut */
              
$img_fuente=$d->path.'/'.$archivo;
              
$img_destino='cortadas/'.$archivo;
              
image_cut($img_fuente,$img_destino,30); /*30 signifca 30 pixeles de corte, eso es lo que mide mas menos el rectangulo */
          
}
      echo 
$archivo."<br/>\n"/* Muestra el nombre de los archivos */
      
}
      
$d->close(); /* Cierro */
      
      
$total=tiempo()-$t0;
      echo 
"<br/>EL PROCESO TARDO: $total (s)"
Pues ahi esta.
Se demoro aprox entre 80 y 90 s, en mi PC de 350 Mhz - 196 RAM.
173 Imagenes un total de 6.78 Megas inicial y 5.41 Megas final.
Me ahorre algunos Bytes :)

Pues ojala que no visite el Foro
Estate Callandito Cluster jejejeje.

Cortese, pegese, ojala le sirva a más de alguien.
Cualquier cosa el manual explicara mejor que yo cada funcion y objeto que he usado.

Saludos.
PD: Gracias por dejar el lado Oscuro (ASP).
__________________
Hacerlo Bien Haciendo el Bien.
Jaso ezazu agur bero bat.
(c) 2002. Made in Chile.
Mi sistema es:
Win(98);Apache(1.3.x);PHP(4.1.1);mySQL(3.23.x)
!Califica este POSTEO¡
  #2 (permalink)  
Antiguo 15/11/2002, 10:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
jajajajajajajajaja yo me

Ahora dile q son 170 y tantas imagenes y eso lleva tiempo hacerlo como el dice

Un saludo,
  #3 (permalink)  
Antiguo 15/11/2002, 21:20
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
hola amigo se podria modificar este scripts para que en vez de recortar las fotos de haga "thumbnails" ??
Desde ya gracias!
  #4 (permalink)  
Antiguo 15/11/2002, 22:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Mas o menos lo podrias hacer .. tendrias q cambiar la funcion de "image_cut" ...

Como siempre .. ahí va un ejemplito de PHP.net ...

Esto te hace el tumbail (la imagen mas pequeña de ua grande) .. si a esto le sumas la porción de código de AngelRoyo q hace la lectura y escritura de la imagen manipulada .. tendrias lo q buscas .. Parece q hace una escala 1:4 si no me equivoco jeje .. ajustalo a tus necesidades .. juega con los valores de $nova_largura y $nova_altura por si quisieras dejar un tamaño fijo del tumbail (y ten cuidado en ajustar la relacion X-Y .. q sino deformaras los tumbails q creees).

Código PHP:
<?
// Cria thumbnail de uma imagem, com boa qualidade
// -----------------------------------------------
// William G. Comnisky
// [email][email protected][/email]
$imagem "img.jpg";
$img_origem imagecreatefromjpeg($imagem);
$nova_largura imagesx($img_origem) / 4;
$nova_altura imagesy($img_origem) / 4;
$img_destino imagecreatetruecolor($nova_largura,$nova_altura);
imagecopyresampled($img_destino,
$img_origem,0,0,0,0,$nova_largura,$nova_altura,imagesx
($img_origem),imagesy($img_origem));
imageJPEG($img_destino);
?>
Un saludo,
  #5 (permalink)  
Antiguo 26/08/2003, 19:46
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años
Puntos: 0
De acuerdo Crear thumb de lados iguales

Buenas a todos y MIL gracias por sus codigos.
Bueno, yo en esto son muy novato pero se sumar, restar, multiplicar y dividir!! (aunque no lo crean), entonces y le hice unas modificaciones para crear Thumbnails todos iguales sin desformar la imagen y además permitir especificar porcentaje de corte para crear el thumbnails.

Este es el codigo modificado:

Código PHP:
<?
/*
    CORTAR "$cutpx" DE UNA IMAGEN
    ANGEL ROYO 2002
   */

function tiempo(){
 list(
$ms,$s)=explode(" ",microtime());
 
$t=($ms $s);
 return 
$t/* Retorna el Tiempo en Segundos */
}/* Esta funcion se la agrege más nada para ver lo que se demora la PC */


function image_cut($src,$destino$ancho_thumb$alto_thumb$porcentaje){
  
$size getimagesize($src);/* Propiedades de la imagen */
  
$im=imagecreatefromjpeg($src); /*Tomo la imagen origen */
  
$img=imagecreate($ancho_thumb,$alto_thumb);/*[0] ANCHO, [1] ALTO, me creo una CANVAS, algo similar que en Firework*/
//lo que tengo que averiguar es la proporcion del thumb con respecto a la img orignal, entonces hago esto:
$suma_lados_or=$size[0]+$size[1]; //aca sumo los lados de la imagen original lado+lado
$suma_lados_des=$ancho_thumb+$alto_thumb///sumo los lados del thumb
$proporcion=$suma_lados_or/$suma_lados_des//cualculo la proporcion del thumb con respecto al original
$final_proporcion=($porcentaje*$proporcion)/100//ahora calculo la proporcion en la que voy a cortar la imgen original para crear luego el thumb segun el porcentaje que el usuario indico, en este caso es de 50%
$agrandar_ancho=$final_proporcion*$ancho_thumb//calculo en pix's lo que debo agrandar de ancho
$agrandar_alto=$final_proporcion*$alto_thumb;// idem de alto
  
imagecopyresized($img$im00$size[0]/2-$agrandar_ancho/2$size[1]/2-$agrandar_alto/2$ancho_thumb$alto_thumb$agrandar_ancho$agrandar_alto); /* Copio en mi CANVAS la imagen $im en la dimensión que deseo, pero primero creo una imagen segun el porcentaje que se indico, luego calculo en centro de la imagen original y desde ahi corto el tamaño que deseo para luego crear el thumbnail*/
  
ImageJPEG($img,$destino,70); /*Exporto la CANVAS a JPG con 85% */
  
ImageDestroy($img); /* La Borro de la Cache */

/* El procedimiento es similar a usar un editor de imagenes */
}



      
$d=dir("empresa/"); /*Directorio con las imagenes de origen*/
      
      
$t0=tiempo();/* Opcional */
      
echo "Handle: ".$d->handle."<br/>\n";/* Opcional */
      
echo "Path: ".$d->path."<br/>\n";/* Opcional */
      
      
while($archivo=$d->read()) {/* Comienzo a leer la carpeta definida en dir */
          
if (eregi(".+.jpe?g$",$archivo)){
              
/* ES JPG o JPEG, por lo tanto aplicamos la funcion image_cut */
              
$img_fuente=$d->path.'/'.$archivo;
              
$img_destino='cortadas/'.$archivo;
              
image_cut($img_fuente,$img_destino,88,120,50); /*88 en el ancho del thumb, 120 es el alto y 50 esel porcentaje en que desea cortar la imagen original para crear el thumb */
          
}
      echo 
$archivo."<br/>\n"/* Muestra el nombre de los archivos */
      
}
      
$d->close(); /* Cierro */
      
      
$total=tiempo()-$t0;
      echo 
"<br/>EL PROCESO TARDO: $total (s)";

?>
bueno, ya se que soy un desastre explicando, pero no es gran cosa y si alguno tiene consejos para hacerlo mejor que me lo haga saber!
  #6 (permalink)  
Antiguo 14/10/2003, 20:01
Avatar de SkyWalker  
Fecha de Ingreso: enero-2002
Mensajes: 39
Antigüedad: 15 años, 11 meses
Puntos: 0
Hola, muchas gracias por su ejemplos, ayudan d la hostia...
Estoy intentado hacer un fotogaleria completita... pero estoy atrancaillo con el tema de los thumb, se crean muy bien... pero el problema es q me gustaria cortar la imagen de origien para q tome el centro de la fotografía y no la parte superior izquierda, así el thumb sigue siendo igual de chico, pero se vería mucho más grande la parte más importante que es el centro...

He probao varias cosas pero lo unico q consigo son bandas negras ... o todo el thumb :)

Cómo hago pa' q corte teniendo en cuenta el centro?
alguna idea?

Este es el código:
Código PHP:
<?
$size 
GetImageSize($ruta); 


$anchoX 175// Esto es definible, según el diseño de la web.
$altoY  150// Esto es definible, según el diseño de la web.

if ($size[0]>=$size[1]){
$ancho  $anchoX;
$alto   = ($anchoX $size[1]) / $size[0];

elseif (
$size[0]<$size[1]) {
$alto   $altoY;
$ancho  = ($altoY $size[0]) / $size[1];
}


if (
$size[2]==2) {
    
$fuente = @imagecreatefromjpeg($ruta);
    } 
elseif (
$size[2]==3) {
    
$fuente = @imagecreatefrompng($ruta);
    }


$tantoportiento 20// Definible

$quitamosancho = ($size[0])*($tantoportiento/100);
$quitamosalto  = ($size[1])*($tantoportiento/100);

$imagen ImageCreateTrueColor($ancho,$alto); 

ImageCopyResampled ($imagen,$fuente,0,0,0,0,$ancho,$alto,$size[0]-$quitamosancho,$size[1]-$quitamosalto); 

if (
$size[2]==2) {
    
Header("Content-type: image/jpeg");
    
imageJpeg($imagen);  
    } 
elseif (
$size[2]==3) {
    
Header("Content-type: image/gif");
    
imagePng($imagen); 
    }

ImageDestroy($imagen); 
?>
  #7 (permalink)  
Antiguo 14/10/2003, 20:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Los "0" de esta función .. definen las coordenadas desde donde se toma de la imagen original para "copiar" ..


Código PHP:
ImageCopyResampled ($imagen,$fuente,0,0,0,0,$ancho,$alto,$size[0]-$quitamosancho,$size[1]-$quitamosalto); 
Ajustalos a tus necesidades (usando un poco de matemáticas .. podrías obtener las dimensiones del cuadrado que quieres recortar de tu imagen original. En $ancho y $alto tienes las dimensiones originales ..)

más info:
http://www.php.net/manual/es/functio...yresampled.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 04:25.