我有问题。当图像保存在我的数据库中时,它们将与文件字节一起保存,并且该记录有一个参考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,然后从中获取文件字节?
答案 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";