操作文件字节时的图像转换

时间:2011-06-02 13:13:59

标签: c# image

我有问题。当图像保存在我的数据库中时,它们将与文件字节一起保存,并且该记录有一个参考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类的方法。然后将FileData类与HttpContext类一起发送到方法:

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,然后从中获取文件字节?

2 个答案:

答案 0 :(得分: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));
                }

答案 1 :(得分: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";