c# - imagesharp - Cómo obtener el tamaño de archivo de "System.Drawing.Image"
imageprocessor documentation (3)
Actualmente estoy escribiendo un sistema que almacena metadatos para alrededor de 140,000 imágenes ish almacenadas dentro de una biblioteca de imágenes heredadas que se trasladan al almacenamiento en la nube. Estoy usando lo siguiente para obtener los datos de jpg ...
System.Drawing.Image image = System.Drawing.Image.FromFile("filePath");
Soy bastante nuevo en la manipulación de imágenes, pero esto está bien para obtener valores simples como ancho, alto, relación de aspecto, etc. pero lo que no puedo resolver es cómo recuperar el tamaño del archivo físico del jpg expresado en bytes. Cualquier ayuda sería muy apreciada.
Gracias
Solución final que incluye un hash MD5 de la imagen para una comparación posterior
System.Drawing.Image image = System.Drawing.Image.FromFile(filePath);
if (image != null)
{
int width = image.Width;
int height = image.Height;
decimal aspectRatio = width > height ? decimal.divide(width, height) : decimal.divide(height, width);
int fileSize = (int)new System.IO.FileInfo(filePath).Length;
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(fileSize))
{
image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
Byte[] imageBytes = stream.GetBuffer();
System.Security.Cryptography.MD5CryptoServiceProvider provider = new System.Security.Cryptography.MD5CryptoServiceProvider();
Byte[] hash = provider.ComputeHash(imageBytes);
System.Text.StringBuilder hashBuilder = new System.Text.StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
hashBuilder.Append(hash[i].ToString("X2"));
}
string md5 = hashBuilder.ToString();
}
image.Dispose();
}
Si no tiene el archivo original, el tamaño del archivo no es claro, ya que depende del formato y la calidad de la imagen. Entonces, lo que tendría que hacer es escribir la imagen en una secuencia (por ejemplo, MemoryStream) y luego usar el tamaño de la secuencia.
Si obtiene su imagen directamente del archivo, puede usar el siguiente código para obtener el tamaño del archivo original en bytes.
var fileLength = new FileInfo(filePath).Length;
Si obtiene su imagen de otra fuente, como obtener un mapa de bits y componerlo con otra imagen, como agregar marca de agua, tendrá que calcular el tamaño en tiempo de ejecución. No se puede simplemente usar el tamaño de archivo original, ya que la compresión puede generar diferentes tamaños de datos de salida después de la modificación. En este caso, puede usar MemoryStream para guardar la imagen en:
long jpegByteSize;
using (var ms = new MemoryStream(estimatedLength)) // estimatedLength can be original fileLength
{
image.Save(ms, ImageFormat.Jpeg); // save image to stream in Jpeg format
jpegByteSize = ms.Length;
}
System.Drawing.Image
no le dará el tamaño de archivo de tamaño. Tienes que usar otra biblioteca para eso.
int len = (new System.IO.FileInfo(sFullPath)).Length;