Files
17168ERP/web/App_Script/DisplayCut3.ashx
2025-08-29 01:27:25 +08:00

184 lines
6.9 KiB
Plaintext

<%@ WebHandler Language="C#" Class="DisplayCut3" %>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
public class DisplayCut3 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString["W"] != null & context.Request.QueryString["H"] != null)
{
string CurrentPath = HttpContext.Current.Server.MapPath("~/upload/");
string FileName = context.Request.QueryString["File"].Trim().Replace("../", "");
int GetWidth = Convert.ToInt32(context.Request.QueryString["W"].Trim());
int GetHeight = Convert.ToInt32(context.Request.QueryString["H"].Trim());
string[] n = Path.GetFileName(FileName).Split('.');
string picType = n[n.Length - 1].ToLower();
if (picType == "jpg")
picType = "jpeg";
if (picType == "png")
picType = "jpeg";
MyWeb .fileSystem fs = new MyWeb.fileSystem();
string FileNameAndPath = CurrentPath + FileName;
if (!System.IO.File.Exists(FileNameAndPath) | !fs.isPhoto(FileName))
{
FileNameAndPath = HttpContext.Current.Server.MapPath("~/App_Script/noimage_us.jpg");
//顯示無圖片
picType = "jpeg";
}
context.Response.ContentType = "Image/" + picType.ToUpper();
context.Response.Clear();
context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(43200));
//開始處理
System.IO.FileInfo Original_FileInfo = new System.IO.FileInfo(FileNameAndPath);
System.Drawing.Image Original_Image = System.Drawing.Image.FromFile(FileNameAndPath);
//讀取圖片
int New_Width = Convert.ToInt32(context.Request.QueryString["W"].Trim());
int New_Height = Convert.ToInt32(context.Request.QueryString["H"].Trim());
int x = 0;
int y = 0;
int old_h = Original_Image.Height;
int old_w = Original_Image.Width;
int value_h = Convert.ToInt32(old_h * (Convert.ToDouble(New_Width) / Convert.ToDouble(old_w)));
int value_w = Convert.ToInt32(old_w * (Convert.ToDouble(New_Height) / Convert.ToDouble(old_h)));
if (New_Width > New_Height)
{
if (old_w < old_h)
{
if (New_Height < value_h) { New_Height = value_h; } else { New_Width = value_w; }
}
else
{
if (New_Width < value_w) { New_Width = value_w; } else { New_Height = value_h; }
}
}
else
{
if (old_w > old_h)
{
if (New_Width < value_w) { New_Width = value_w; } else { New_Height = value_h; }
}
else
{
if (New_Height < value_h) { New_Height = value_h; } else { New_Width = value_w; }
}
}
System.Drawing.Image New_Image = new System.Drawing.Bitmap(GetWidth, GetHeight);
System.Drawing.Graphics ObjGraphics = System.Drawing.Graphics.FromImage(New_Image);
MyWeb.global global = new MyWeb.global();
//相關設定
ObjGraphics.InterpolationMode = global.InterpolationMode;
ObjGraphics.SmoothingMode = global.SmoothingMode;
ObjGraphics.CompositingQuality = global.CompositingQuality;
if (picType == "png")
{
ObjGraphics.Clear(System.Drawing.Color.Transparent);
//清空Graphics, 以透明背景色填充
}
else
{
ObjGraphics.Clear(System.Drawing.Color.White);
//清空Graphics, 以白色填充
}
//在指定位置按指定大小繪制原圖片的片段
ObjGraphics.DrawImage(Original_Image, new System.Drawing.Rectangle((GetWidth - New_Width) / 2, (GetHeight - New_Height) / 2, New_Width, New_Height), new System.Drawing.Rectangle(x, y, Original_Image.Width, Original_Image.Height), System.Drawing.GraphicsUnit.Pixel);
if (fs.WatermarkMode == "1")
{
FileNameAndPath = HttpContext.Current.Server.MapPath(fs.WatermarkPath);
System.Drawing.Image Watermark_Image = System.Drawing.Image.FromFile(FileNameAndPath);
int w_Width = Convert.ToInt32(Math.Round(Convert.ToDouble(GetWidth) * 0.8));
int w_Height = Convert.ToInt32(Watermark_Image.Height * (Convert.ToDouble(w_Width) / Convert.ToDouble(Watermark_Image.Width)));
int w_myX = (GetWidth - w_Width) / 2; //浮水印水平置中
int w_myY = (GetHeight - w_Height) / 2 + w_Height; //浮水印水平垂直置中向下偏移一個高度
var colorMatrix = new ColorMatrix();
colorMatrix.Matrix33 = (float)Convert.ToSingle(fs.WatermarkPct);
var imageAttributes = new ImageAttributes();
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
ObjGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
ObjGraphics.DrawImage(
Watermark_Image,
new Rectangle(w_myX, w_myY, w_Width, w_Height),
0,
0,
Watermark_Image.Width,
Watermark_Image.Height,
GraphicsUnit.Pixel,
imageAttributes);
}
//下方設定使JPG質量
System.Drawing.Imaging.EncoderParameters EPS = new System.Drawing.Imaging.EncoderParameters();
System.Drawing.Imaging.EncoderParameter EP = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Convert.ToInt64(global.ImageCompressionQuality));
EPS.Param[0] = EP;
System.Drawing.Imaging.ImageCodecInfo[] codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo ICI = null;
foreach (System.Drawing.Imaging.ImageCodecInfo codec in codecs)
{
if (codec.MimeType.ToLower() == ("image/" + picType).ToLower())
{
ICI = codec;
}
}
New_Image.Save(context.Response.OutputStream, ICI, EPS);
//Clear
New_Image.Dispose();
ObjGraphics.Dispose();
Original_Image.Dispose();
}
}
public bool IsReusable
{
get { return false; }
}
}