Problema con el color de los Thumbnails
4 seguidores
Hola a todos,
estoy utilizando un código para generar una previsualización de unas imágenes que tengo en el servidor con PHP. La imagen la crea, pero con una calidad de color bajísima y no he encontrado nada de documentación al respecto. El código que estoy usando es el siguiente:
<code>
$alto = 100;
$fuente = @imagecreatefromjpeg($nombre);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$escala = ($imgAlto / $alto);
$ancho = round($imgAncho / $escala);
$imagen = ImageCreate($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header("Content-type: image/jpeg");
imagejpeg($imagen);
</code>
A ver si me podéis ayudar a solucionarlo.
Un saludo,
David
MAXer3D
<code>
imageJpeg($imagen,"",50);
</code>
donde 50 es la calidad del thumb
zigotica
usa ImageCopyResampled en lugar de ImageCopyResized
MAXer3D
me falto agregar otro reemplazo:
<code>
$imagen = ImageCreatetruecolor($ancho,$alto);
</code>
dL
Hola a todos,
ahora funciona perfectamente. El código que quedó al final fue este:
<code>$alto = 100;
$fuente = @imagecreatefromjpeg($nombre);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$escala = ($imgAlto / $alto);
$ancho = round($imgAncho / $escala);
$imagen = ImageCreate($ancho,$alto);
$imagen = ImageCreatetruecolor($ancho,$alto);
imagecopyresampled($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header("Content-type: image/jpeg");
imagejpeg($imagen,"", 100);</code>
Un saludo y muchísimas gracias a todos,
David
MAXer3D
borra esta linea:
<code>
$imagen = ImageCreate($ancho,$alto);
</code>
zigotica
y añade esto al final
<code>imagedestroy($imagen); </code>
referencia: http://es2.php.net/imagedestroy
markshock
ahí está si señor.. lo habeis dejao nikelao... ;)
el otro día hice esta... para cuando necesito que los thumbnails sean siempre iguales en ancho y alto.. ya provengan de una imagen en portrait o landscape..
<code>function crop_image($nombreOriginal , $nombreThumb, $path, $src, $x, $y, $dest, $dest_w, $dest_h) {
$original = imagecreatefromjpeg($src);
/* Hallamos la anchura y altura de la imagen original */
$ancho = imagesx($original);
$alto = imagesy($original);
/* Indicamos la anchura que tendrá la miniatura */
$anchomini = $dest_w;
$altomini_tmp = $dest_h;
//landscape
if(($ancho/$anchomini) > ($alto/$altomini_tmp)){
$tmp_height = $altomini_tmp;
$tmp_width = $ancho * $altomini_tmp / $alto;
$tipo = 'L';
}else{//vertical
$tmp_height = $alto * $anchomini / $ancho;
$tmp_width = $anchomini;
$tipo = 'P';
}
if($tipo=='L'){
$img = imagecreatetruecolor($tmp_width,$tmp_height);
imagecopyresampled($img,$original,0,0,0,0,$tmp_width,$tmp_height,$ancho,$alto);
}elseif($tipo=='P'){
$img = imagecreatetruecolor($tmp_width,$tmp_height);
imagecopyresampled($img,$original,0,0,0,0,$tmp_width,$tmp_height,$ancho,$alto);
}
$nombreTemp = "temp_".$nombreThumb;
$new_img = imagecreatetruecolor($dest_w, $dest_h);
imagecopyresampled($new_img, $img, 0, 0, $x, $y, $dest_w, $dest_h, $dest_w, $dest_h);
imagejpeg($new_img,$dest,90);
imagedestroy($img);
imagedestroy($original);
}</code>
uso:
<code>
//insertar imagenes en el servidor
$N = $total_imagenes; //Número de archivos a Subir
for($i=0; $i<$N; $i++) {
if (is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
$split_path = split("/", $_FILES['userfile']['name'][$i]);
$split_path = end($split_path);
$extension = split("[/.]", $split_path);
if (end($extension) == "php3" || end($extension) == "php") {
echo "tipo de archivo invalido.";
} else {
$RUTA_UPLOADED = "../imagenes/gallery/";
$NOMBRE_FILE[$i] = $imagen_id . "_a." . end($extension);
$NOMBRE_THUMB[$i] = $imagen_id . "_thumb." . end($extension);
move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $RUTA_UPLOADED . $NOMBRE_FILE[$i]);
chmod($RUTA_UPLOADED . $NOMBRE_FILE[$i], 0644);
$upload_hd = true;
}
$path = "../imagenes/gallery/";
$nombreOriginal = $NOMBRE_FILE[$i];
$nombreThumb = $NOMBRE_THUMB[$i];
$src = $path . $nombreOriginal;
$x = 0;
$y = 0; //pongo 5 para que recorte arriba y abajo 5 pixeles.... si pusiese 0, cortaria 10 de abajo.
$dest = $path . $nombreThumb;
$dest_w = 150;
$dest_h = 160;
crop_image($nombreOriginal , $nombreThumb, $path, $src, $x, $y, $dest, $dest_w, $dest_h);
}
}
</code>
markshock
la tengo en guarrete.. he de pulirla.. :P a ver si entre esta tarde y mañana puedo...
pases la imagen que le pases.. te deja los thumbnails del mismo tamaño.. estó se hizo para un cliente caprichoso.. que quería que todos los thumbails ocuparan lo mismo de alto y ancho...