c# - permite - que archivo de imagen es mas pesado gif o jpg
¿Detectando si un archivo de imagen PNG es una imagen transparente? (3)
Estoy buscando una manera de determinar rápidamente si una imagen PNG tiene características transparentes. Es decir, si alguna parte de la imagen es translúcida o muestra el fondo de alguna manera. ¿Alguien sabe una manera simple de detectar esto?
ACTUALIZACIÓN: De acuerdo, ¿hay una manera menos complicada de extraer la especificación PNG y el código de piratería?
¿Por qué no simplemente recorrer todos los píxeles de la imagen y verificar sus valores alfa?
bool ContainsTransparent(Bitmap image)
{
for (int y = 0; y < image.Height; ++y)
{
for (int x = 0; x < image.Width; ++x)
{
if (image.GetPixel(x, y).A != 255)
{
return true;
}
}
}
return false;
}
Aquí hay un enfoque efectivo: Abra el PNG en binario. Busque el byte 26 (25 si se cuenta desde cero). Evalúe el valor de byte del carácter char: 2 o inferior => definitivamente opaco, 3 o superior => admite transparencia. De acuerdo con mis conclusiones, los archivos generados por Photoshop solo usan 3 o más cuando es necesario, lo que hace que sea una forma confiable de saber cuándo usarlos. Parece que casi todos los archivos tienen 2 para opaco y 6 para mezcla alfa. También puede considerar verificar las cadenas PNG e IHDR que se encuentran en esa área general para hacer que su código sea infalible.
Bueno, aún no entiendo la pregunta por completo, pero si solo quieres verificar si una imagen dada puede usar funciones de transparencia, puedes usar este código:
Image img = Image.FromFile ( "...", true );
if ( (img.Flags & 0x2) != 0)
{
}
Aunque no le ayudará a determinar si un archivo png determinado utiliza realmente características transparentes, indicará que tiene el tipo de color 4 o 6 (ambos admiten la transparencia) de acuerdo con la especificación del archivo png.