此函數返回調整大小和居中的圖像,並執行調用url thumb.aspx?image=test.jpg&width=100&height=50
問題在於執行後,我無法重命名或刪除原始文件文件從服務器。調整大小後無法刪除或重命名原始文件
<%@ Import Namespace="System.Drawing" %>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {
try {
Response.Cache.VaryByParams["Image;Width;Height;needToFill"] = true;
Response.ContentType = "image/jpeg";
System.Collections.Hashtable imageOutputFormatsTable = new System.Collections.Hashtable();
imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Gif.Guid, System.Drawing.Imaging.ImageFormat.Gif);
imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Jpeg.Guid, System.Drawing.Imaging.ImageFormat.Jpeg);
imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Bmp.Guid, System.Drawing.Imaging.ImageFormat.Gif);
imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Tiff.Guid, System.Drawing.Imaging.ImageFormat.Jpeg);
imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Png.Guid, System.Drawing.Imaging.ImageFormat.Jpeg);
string imageLocation = Server.MapPath(Request.QueryString["Image"]);
int Width = Convert.ToInt32(Request.QueryString["Width"]);
int Height = Convert.ToInt32(Request.QueryString["Height"]);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageLocation);
int sourceWidth = image.Width;
int sourceHeight = image.Height;
int sourceX = 0;
int sourceY = 0;
double destX = 0;
double destY = 0;
double nScale = 0;
double nScaleW = 0;
double nScaleH = 0;
bool needToFill=true;
nScaleW = ((double)Width/(double)sourceWidth);
nScaleH = ((double)Height/(double)sourceHeight);
if (Request.QueryString["needToFill"] != null) {
needToFill = Convert.ToBoolean(Request.QueryString["needToFill"]);
}
if (!needToFill) {
nScale = Math.Min(nScaleH, nScaleW);
} else {
nScale = Math.Max(nScaleH, nScaleW);
destY = (Height - sourceHeight * nScale)/2;
destX = (Width - sourceWidth * nScale)/2;
}
if (nScale > 1) nScale = 1;
int destWidth = (int)Math.Round(sourceWidth * nScale);
int destHeight = (int)Math.Round(sourceHeight * nScale);
System.Drawing.Bitmap bmPhoto = new System.Drawing.Bitmap(destWidth + (int)Math.Round(2 * destX), destHeight + (int)Math.Round(2 * destY));
bmPhoto.SetResolution(72, 72);
System.Drawing.Imaging.ImageFormat outputFormat = (System.Drawing.Imaging.ImageFormat)imageOutputFormatsTable[image.RawFormat.Guid];
ApplicationException ex= new ApplicationException(string.Format("destWidth:{0}, destX:{1}, destHeight:{2}, desxtY:{3}, Width:{4}, Height:{5}", destWidth, destX, destHeight, destY, Width, Height));
System.Drawing.Graphics grPhoto = System.Drawing.Graphics.FromImage(bmPhoto);
Rectangle to = new System.Drawing.Rectangle((int)Math.Round(destX), (int)Math.Round(destY), destWidth, destHeight);
Rectangle from = new System.Drawing.Rectangle(sourceX, sourceY, sourceWidth, sourceHeight);
grPhoto.DrawImage(image, to, from, System.Drawing.GraphicsUnit.Pixel);
bmPhoto.Save(Response.OutputStream, outputFormat);
bmPhoto.Dispose();
grPhoto.Dispose();
}
catch (Exception ex){
System.IO.StreamWriter sw=null;
try{
sw=new System.IO.StreamWriter(Server.MapPath("error.txt"),true);
sw.WriteLine("Error : " + ex.Message + " processing " + Request.QueryString["Image"]);
}
catch{}
finally{sw.Close();}
Response.Redirect("thumberror.gif");
}
}
</script>
'image'看起來並不像它正在處理中。我建議使用'using'語句來使資源管理更加清晰。 – vcsjones
將所有內容都移出該控件,而不需要閱讀請求並返回響應。將圖像大小調整邏輯移動到它自己的類中。然後,您可以在不啓動Web服務器的情況下測試該課程。 – axlj
@vcsjones您的評論是答案;) – Vixed