[英]How can I generate a thumbnail from an image in server folder?
我一直在试图解决这个问题,但是我什么也没得到。 我想做的是:我有一个aspx页面,您可以在其中上传图像(它们存储在服务器上的文件夹中),在一页上您可以看到所有上传的图像并生成链接(一个标签)并参考了这些图片,但直到现在它已将完整图片作为“缩略图”加载,并且它们的尺寸过大(1920x1200px),所以我用通用处理程序替换了图片src,应该从该图片中获取图片文件夹,然后将其返回,其大小调整为209x133px。
但是我不知道从哪里开始,我不胜感激,也许有人在那里曾经做过类似的事情。
无论如何,先谢谢
这就是我用中继器创建链接和图像的方式:
protected void repImages_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.Item)
{
string sFile = e.Item.DataItem as string;
//Create the thumblink
HyperLink hlWhat = e.Item.FindControl("hlWhat") as HyperLink;
hlWhat.NavigateUrl = ResolveUrl("~/_img/_upload/" + sFile);
hlWhat.ToolTip = System.IO.Path.GetFileNameWithoutExtension(sFile);
hlWhat.Attributes["rel"] = "imagebox-bw";
hlWhat.Attributes["target"] = "_blank";
Image oImg = e.Item.FindControl("imgTheImage") as Image;
oImg.ImageUrl = ResolveUrl("Thumbnail.ashx?img=" + sFile);
oImg.Width = 203;
oImg.CssClass = "galleryImgs";
}
}
现在,我的处理程序如下所示:
<%@ WebHandler Language="C#" Class="Thumbnail" %>
using System;
using System.Web;
public class Thumbnail : IHttpHandler {
public void ProcessRequest (HttpContext context) {
if (!string.IsNullOrEmpty(context.Request.QueryString["img"]))
{
string fileName = context.Request.QueryString["img"];
}
else
{
}
}
public bool IsReusable {
get {
return false;
}
}
}
这是一些可能需要调整的代码,但可以帮助您继续前进。
// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};
public void ProcessRequest(HttpContext context)
{
// render direct
context.Response.BufferOutput = false;
bool fFail = true;
try
{
if (!string.IsNullOrEmpty(context.Request.QueryString["img"]))
{
string fileName = context.Request.QueryString["img"];
using( var inputImage = new Bitmap(fileName))
{
// create the thubnail
FinalImage = CreateThubNain();
// send it to browser
FinalImage.Save(context.Response.OutputStream, ImageFormat.Jpeg);
// flag tha all ends up well
fFail = false;
}
}
}
catch(Exception x)
{
// log the error
Debug.Fail("Check why is fail - error:" + x.ToString());
}
if(fFail)
{
// send something anyway
context.Response.ContentType = "image/gif";
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}
else
{
// this is a header that you can get when you read the image
context.Response.ContentType = "image/jpeg";
// the size of the image, saves from load the image, and send it here
// context.Response.AddHeader("Content-Length", imageData.Length.ToString());
// cache the image - 24h example
context.Response.Cache.SetExpires(DateTime.Now.AddHours(24));
context.Response.Cache.SetMaxAge(new TimeSpan(24, 0, 0));
}
}
关于如何制作Thubnail的一个问题: 在保持宽高比的同时从数据库图像制作缩略图
一些评论。 如果使用处理程序制作缩略图,则需要花费大量的处理时间来进行相同和相同的制作。 我建议跟踪缩略图并将其保存在磁盘上,然后直接从磁盘使用文件。
我们使用这样的方法:
private Image ScaleFreeHeight(string imagePath, int newWidth)
{
var byteArray = new StreamReader(imagePath).BaseStream;
var image = Image.FromStream(byteArray);
var newHeight2 = Convert.ToInt32(newWidth * (1.0000000 * image.Height / image.Width));
var thumbnail = new Bitmap(newWidth, newHeight2);
var graphic = Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality
graphic.DrawImage(image, 0, 0, newWidth, newHeight2);
return thumbnail;
}
添加System.Drawing和System.Drawing.Drawing2D命名空间,您可以调整图像的大小CodeBehind :
public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxHeight)
{
var ratio = (double)maxHeight / image.Height;
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
var newImage = new Bitmap(newWidth, newHeight);
using (var g = Graphics.FromImage(newImage))
{
g.DrawImage(image, 0, 0, newWidth, newHeight);
}
return newImage;
}
详细的文章: 如何在Asp.net C#中上传时调整图像大小
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.