Estaba intrigado por this discussion de escalado de imagen y posteriormente descubrí que el código PHP que estoy usando para crear miniaturas de imágenes cargadas sufre del mismo problema. Decidí probar la corrección PHP publicada cerca de la parte inferior (convertir gamma de 2.2 a 1.0, cambiar el tamaño de la imagen, convertir gamma de 1.0 a 2.2). Esto funciona para resolver el problema mencionado en el artículo, sin embargo, esta modificación del código tiene el desafortunado efecto secundario de noquear la transparencia del canal alfa PNG.PHP GD2: cómo mantener la transparencia del canal alfa y corregir gamma
Aquí está el código que tengo con la corrección de gamma en su lugar.
<?php
$image = imagecreatefrompng($source_file);
$resized_image = imagecreatetruecolor($new_width, $new_height);
imagealphablending($resized_image, false);
imagesavealpha($resized_image, true);
imagegammacorrect($image, 2.2, 1.0);
imagecopyresampled($resized_image, $image, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
imagegammacorrect($resized_image, 1.0, 2.2);
imagepng($resized_image, $dest_file);
?>
Alguien sabe cómo cambiar el tamaño de la imagen, empleando el truco corrección de gamma, mientras se mantiene la transparencia del canal alfa de la imagen original?
Editar
imágenes de muestra:
- archivo original - PNG con transparencia de canal alfa
- archivo cambia de tamaño con ambas imagegammacorrect llamadas de función() comentadas
- archivo cambia de tamaño con tanto imagegammacorrect() función llama en su lugar
Puede ver que th La transparencia está bien hasta que intentes corregir la gamma. (Forma más fácil de ver la transparencia está trabajando a continuación es para inspeccionar la etiqueta de párrafo envuelto alrededor de las imágenes y añadir un fondo:. Negro; a su atributo de estilo a través de FireBug o similares)
original image http://ender.hosting.emarketsouth.com/images/test-image.png no gamma correction http://ender.hosting.emarketsouth.com/images/test-image-resized-no-gamma.png gamma corrected - no transparency http://ender.hosting.emarketsouth.com/images/test-image-resized.png
interesante, tendré que pasar algo de tiempo con esto mañana cuando regrese a la oficina :) –
tuve que hacer una pequeña refactorización para combinar esto con mi código existente, pero al final funciona muy bien. ¡Muy apreciado! –