2011-06-02 20 views
0

我遇到问题。当图像保存在我的数据库中时,它们将与文件字节一起保存,并且此记录具有参考ID。有一个.ashx文件将采用此参考ID号并获取文件信息/文件字节并显示图像或允许下载图像。操纵文件字节时的图像转换

img src="/download.ashx?id=THEREFID 

这将在页面上显示图像。如果我只是链接到.ashx页面,它会下载图像。这可以。然而,我的一些图像保存为.TIF,我需要将它们转换为.jpeg。

我有一个名为的FileData

public string FileName; 
public byte[] theData; 
public long FileSizeBytes; 
public string MIME; 
public string Extension; 

类在我.ashx的页面我有一个加载上面的FileData类的方法。然后用HttpContext类沿的FileData类被发送到一个方法:

private void Process(HttpContext context, FileData file) 
{ 
    context.Response.ContentTYpe = file.MIME; 
    context.Response.AddHeader("Content-Disposition", "attachment; filename=" 
     + file.FileName.Replace(' ', '_') 
     + file.FileExtension); 
    context.Response.AddHeader("Content-Length", file.FileSizeBytes.ToString()); 
    context.Response.Expires = 0; 
    context.Response.BinaryWrite(file.Data); 
    context.ApplicationInstance.CompleteRequest(); 
} 

我需要找到一种方法,这种信息转换为JPEG。我想也许是一个临时位图,将其转换为.jpeg,然后从这里获取文件字节?

回答

0

我会做它,你打算......

或多或少这样的:

   System.Drawing.Bitmap tiffImage; 
       using(BinaryWriter baseWriter = new BinaryWriter(new MemoryStream())) 
       { 
        baseWriter.Write(tiffData); 
        baseWriter.BaseStream.Position = 0; 
        tiffImage = new System.Drawing.Bitmap(baseWriter.BaseStream); 
       } 

       MemoryStream jpgStream = new MemoryStream(); 

       tiffImage.Save(jpgStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
       jpgStream.Position = 0; 
       using (BinaryReader br = new BinaryReader(jpgStream)) 
       { 
        context.Response.BinaryWrite(br.ReadBytes(jpgStream.Length)); 
       } 
0

我想通了。这是我做的:

Image img = Image.FromStream(new MemoryStream(file.Data)); 
Bitmap bmp = (Bitmap)img; 

EncoderParameters encoderParams = new EncoderParameters(); 
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 50L); 

ImageCodecInfo codecInfo = GetEncoderInfo("image.jpeg"); 
MemoryStream newImage = new MemoryStream(); 

bmp.Save(newImage, codecInfo, encoderParams); 

byte[] newData = newImage.ToArray(); 

//Overwritting the original FileData 
file.Data = newData; 
file.FileSizeBytes = newData.Length; 
file.MIME = "image/jpeg";