Foros del Web » Programando para Internet » PHP »

Redimensionamiento png transparente

Estas en el tema de Redimensionamiento png transparente en el foro de PHP en Foros del Web. Hola a todos, Tengo dos problemas que creo que no son muy dificiles de solucionar pero no doy con la solución. Uso la libreria gd ...
  #1 (permalink)  
Antiguo 20/03/2008, 03:44
 
Fecha de Ingreso: octubre-2005
Mensajes: 240
Antigüedad: 18 años, 6 meses
Puntos: 1
Redimensionamiento png transparente

Hola a todos,

Tengo dos problemas que creo que no son muy dificiles de solucionar pero no doy con la solución. Uso la libreria gd para tratar mis imagenes.

En primer lugar parte de mi script lo que tiene que hacer es redimensionar un png.

Código PHP:
$watermark "ruta_al archivo";
$im imagecreatefrompng($watermark);
        
// DATOS PARA REDIMENSIONAR
$watermark_width_original intval(imagesx($im));
$watermark_height_original intval(imagesy($im));
$watermark_width intval(imagesx($im2)*0.42);
$constante imagesx($im) / $watermark_width;
$watermark_height intval(imagesy($im)/$constante);
        
$im_water imagecreatetruecolor($watermark_width,$watermark_height);
        
imagecopyresampled($im_water,$im,0,0,0,0,$watermark_width,$watermark_height,$watermark_width_original,$watermark_height_original);

imagepng($im_water,'ruta_de_salida',9); 
Esto me lo hace bien, pero el png cuando lo cargo desde archivo es transparente y aquí me lo saca en negro, como hago para mantener la transparencia? Leí cosas sobre imagecolortransparent() y probé mucho, pero no me resultó, asi que a ver si hay alguien que me diga como usarlo.

En segundo lugar, como puedo hacer que el archivo resultado de ese redimensionamiento, pueda usarlo para meter marca de agua sin tener que sacarlo a un archivo, probe con imagenpng($im_water); a secas y luego probé de pasar $im_water al imagecopy para que haga la marca de agua pero no funciona.

Llevo horas mirando esto, se que debe ser una tontería pero no lo encuentro. Un poquito de ayuda me vendría bien.

Gracias por vuestro tiempo, un saludo.
  #2 (permalink)  
Antiguo 20/03/2008, 05:31
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Redimensionamiento png transparente

Hola:

Los pasos que yo doy son los siguientes: creo la imagen nueva con imagecreatetruecolor, luego reservo un color para hacerlo transparente, lleno la nueva imagen con ese color, y lo hago transparente. Por último uso imagecopy resized (en vez de resampled)...

$original = imagecreatefromstring(file_get_contents($url));
$nueva = imagecreatetruecolor($nuevoWidth, $nuevoHeight);
$transparente = imagecolorallocate($nueva, 255, 255, 255);
imagefill($nueva, 0, 0, $transparente);
imagetransparent($nueva, $transparente);
imagecopyresized($nueva, $original, 0, 0, 0, 0, $nuevoWidth, $nuevoHeight, imagesX($original), imagesY($original));
...

Tal vez puse alguna cosa mal, porque está "a capella"...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 20/03/2008, 06:07
 
Fecha de Ingreso: octubre-2005
Mensajes: 240
Antigüedad: 18 años, 6 meses
Puntos: 1
Re: Redimensionamiento png transparente

Hola,

Supongo que te refieres a imagecolortransparent() no?

Lo he probado, y me lo saca en blanco (cuando lo abro con photoshop) y algo raro distorsionado con el visor de imagenes de windows vista. Uso resampled, pero también use resized y el resultado fue el mismo.

El codigo que estoy usando es este:

Código PHP:
$watermark "ruta";
$im imagecreatefrompng($watermark);
        
        
// RESCALAMOS LA MARCA DE AGUA
        
$watermark_width_original intval(imagesx($im));
        
$watermark_height_original intval(imagesy($im));
        
$watermark_width intval(imagesx($im2)*0.42);
        
$constante imagesx($im) / $watermark_width;
        
$watermark_height intval(imagesy($im)/$constante);
        
        
$im_water imagecreatetruecolor($watermark_width,$watermark_height);
        
        
$transparente imagecolorallocate($im_water255255255);
        
imagefill($im_water00$transparente);
        
imagecolortransparent($im_water$transparente);
        
imagecopyresampled($im_water,$im,0,0,0,0,$watermark_width,$watermark_height,$watermark_width_original,$watermark_height_original);
        
imagepng($im_water,'ruta_salida',9); 
Alguna idea?
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 20:51.