一、首先先上效果圖:
1、上傳前
2、上傳後
二、主要使用控件:FileUpload,DataList展示多張圖片
三、代碼
1、前臺aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProductZiZhiUpload.aspx.cs" Inherits="ProductZiZhiUpload" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="UTF-8">
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#upBox{
text-align: center;
/*width:500px;*/
padding: 2px;
border: 1px solid #666;
margin: auto;
margin-top: 15px;
margin-bottom: 20px;
position: relative;
border-radius: 10px;
}
#upBox2{
text-align: center;
/*width:500px;*/
padding: 2px;
border: 1px solid #666;
margin: auto;
margin-top: 15px;
margin-bottom: 20px;
position: relative;
border-radius: 10px;
}
#upBox3{
text-align: center;
/*width:500px;*/
padding: 2px;
border: 1px solid #666;
margin: auto;
margin-top: 15px;
margin-bottom: 20px;
position: relative;
border-radius: 10px;
}
#upBox4{
text-align: center;
/*width:500px;*/
padding: 2px;
border: 1px solid #666;
margin: auto;
margin-top: 15px;
margin-bottom: 20px;
position: relative;
border-radius: 10px;
}
#inputBox{
width: 100%;
height: 40px;
border: 1px solid cornflowerblue;
color:red;
border-radius: 20px;
position: relative;
text-align: center;
line-height: 40px;
overflow: hidden;
font-size: 16px;
background-color:deepskyblue;
}
#inputBox2{
width: 100%;
height: 40px;
border: 1px solid cornflowerblue;
color:red;
border-radius: 20px;
position: relative;
text-align: center;
line-height: 40px;
overflow: hidden;
font-size: 16px;
background-color:deepskyblue;
}
#inputBox3{
width: 100%;
height: 40px;
border: 1px solid cornflowerblue;
color:red;
border-radius: 20px;
position: relative;
text-align: center;
line-height: 40px;
overflow: hidden;
font-size: 16px;
background-color:deepskyblue;
}
#inputBox4{
width: 100%;
height: 40px;
border: 1px solid cornflowerblue;
color:red;
border-radius: 20px;
position: relative;
text-align: center;
line-height: 40px;
overflow: hidden;
font-size: 16px;
background-color:deepskyblue;
}
#inputBox input{
width: 114%;
height: 40px;
opacity: 0;
cursor: pointer;
position: absolute;
top: 0;
left: -14%;
}
#inputBox2 input{
width: 114%;
height: 40px;
opacity: 0;
cursor: pointer;
position: absolute;
top: 0;
left: -14%;
}
#inputBox3 input{
width: 114%;
height: 40px;
opacity: 0;
cursor: pointer;
position: absolute;
top: 0;
left: -14%;
}
#inputBox4 input{
width: 114%;
height: 40px;
opacity: 0;
cursor: pointer;
position: absolute;
top: 0;
left: -14%;
}
#imgBox{
text-align: left;
}
#imgBox2{
text-align: left;
}
#imgBox3{
text-align: left;
}
#imgBox4{
text-align: left;
}
.yincang{
display:none;
}
#Button1{
display: inline-block;
text-align: center;
line-height: 30px;
outline: none;
width: 100px;
height: 30px;
background: cornflowerblue;
border: 1px solid cornflowerblue;
color: white;
cursor: pointer;
margin-top: 30px;
border-radius: 5px;
}
.card-layerBg {
display: none;
width: 100%;
z-index: 999;
position: fixed;
background-color: #000;
opacity: 0.5;
top: 0;
height: 100%;
filter: alpha(opacity=50);
}
.card-layerCon {
display: none;
width: 600px;
padding: 10px 30px 20px 0;
background-color: #fff;
z-index: 9999;
position: fixed;
left: 50%;
top: 50%;
margin-left: -300px;
opacity: 1;
filter: alpha(opacity=100);
text-align:center;
}
.close {
font-size: 33px;
text-align: center;
color: #ab2223;
position: absolute;
right: 10px;
top: -8px;
cursor: pointer;
}
.card-layerM {
width: 100%;
margin: 0 auto;
padding: 10px;
padding-top: 25px;
overflow-y: auto;
max-height:100%;
text-align: center;
}
.card-layerM img{
width:auto;
max-width:100%;
max-height:100%;
}
</style>
<script src="js/jquery1.10.2.min.js"></script>
<script src="My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript">
//有效期字段是否爲空檢驗方法
function btnsave_onclick() {
var ctime = $("*[id$=tendtime]").val();
$("*[id$=Label2]").text("*");
if (ctime == "") {
alert("有效期爲空!");
return false;
} else {
return true;
}
}
//點擊上傳圖片查詢大圖的js
function layer(small) {
$(".layer_con img").on("load", function () {
var $con = $(".layer_con").height() + 30;
$(".layer_bg").css({ "display": "block" });
var $winH = $(window).height();
if ($con > $winH) {
$(".layer_con").css({ "height": $winH, "display": "block", "top": "0", "margin-top": "0" });
} else {
$(".layer_con").css({ "display": "block", "top": "50%", "margin-top": -$con / 2 });
}
})
}
//關閉放大圖片
$(function () {
$(".close").on("click", function () {
$(".layer_con").css("display", "none");
$(".layer_bg").css("display", "none");
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<div style=" margin-top:20px;">
<table align="center" border="1" bordercolor="#b7dcef" cellpadding="1" cellspacing="1"
width="99%">
<tr>
<td align="right" width="25%" height="30px" class="auto-style1">
藥品生產批件有效期:</td>
<td align="left" width="30%" class="auto-style1">
<asp:TextBox ID="tendtime" runat="server" onClick="WdatePicker({el:this,dateFmt:'yyyy-MM-dd'})" Width="123px"></asp:TextBox>
<asp:Label ID="Label2" runat="server" Text="*" ForeColor="#CC0000"></asp:Label>
</td>
<td>
點擊圖片查看大圖
</td>
</tr>
</table>
</div>
<div style="width: 100%;">
<div id="upBox">
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:HiddenField ID="HiddenField2" runat="server" />
<div id="inputBox">
//點擊FileUpload1上傳瀏覽按鈕,通過javascript:__doPostBack('lbUploadPhoto',''),直接執行lbUploadPhoto按鈕的方法
<asp:FileUpload ID="FileUpload1" runat="server" οnchange="javascript:__doPostBack('lbUploadPhoto','')" />
<asp:LinkButton ID="lbUploadPhoto" runat="server" OnClick="lbUploadPhoto_Click" CssClass="yincang"></asp:LinkButton>
點擊選擇藥品生產批件
</div>
<div id="imgBox">
<asp:DataList ID="CFlist" runat="server" BackColor="White"
BorderColor="#E7E7FF" CellPadding="3"
GridLines="Horizontal" Width="99%" onitemcommand="DataList1_ItemCommand" RepeatDirection="Horizontal" RepeatColumns="5">
<AlternatingItemStyle BackColor="#F7F7F7" />
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" BorderColor="black" />
<ItemTemplate >
<table style="border-color:Black">
<tr>
<td style="border-style:none">
<img alt="<%#Eval("imagename") %>" src='<%#Eval("imageurl") %>' style="height:270px ;cursor:hand" οnclick=" $('.layer_con img').prop('src', this.src);layer($(this));"/>
//onclick方法裏是點擊圖片看大圖的js
</td>
</tr>
<tr>
<td style="height:40px;width:100px;border-style:none" >
<center> <asp:LinkButton ID="lbDe" CommandArgument=<%#Eval("id") %> CommandName="De" runat="server">刪除</asp:LinkButton></center></td>
</tr>
</table>
</ItemTemplate>
<SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
</asp:DataList>
</div>
</div>
<div id="upBox2">
<div id="inputBox2">
<asp:FileUpload ID="FileUpload2" runat="server" οnchange="javascript:__doPostBack('lbUploadPhoto2','')" />
<asp:LinkButton ID="lbUploadPhoto2" runat="server" CssClass="yincang" OnClick="lbUploadPhoto2_Click"></asp:LinkButton>
點擊選擇藥品包裝及說明書</div>
<div id="imgBox2">
<asp:DataList ID="DataList2" runat="server" BackColor="White"
BorderColor="#E7E7FF" CellPadding="3"
GridLines="Horizontal" Width="99%" onitemcommand="DataList2_ItemCommand" RepeatDirection="Horizontal" RepeatColumns="5">
<AlternatingItemStyle BackColor="#F7F7F7" />
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" BorderColor="black" />
<ItemTemplate >
<table style="border-color:Black">
<tr>
<td style="border-style:none">
<img alt="<%#Eval("imagename") %>" src='<%#Eval("imageurl") %>' style="height:270px ;cursor:hand" οnclick=" $('.layer_con img').prop('src', this.src);layer($(this));"/>
</td>
</tr>
<tr>
<td style="height:40px;width:100px;border-style:none" >
<center> <asp:LinkButton ID="lbDe" CommandArgument=<%#Eval("id") %> CommandName="De" runat="server">刪除</asp:LinkButton></center></td>
</tr>
</table>
</ItemTemplate>
<SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
</asp:DataList>
</div>
</div>
<div id="upBox3">
<div id="inputBox3">
<asp:FileUpload ID="FileUpload3" runat="server" οnchange="javascript:__doPostBack('lbUploadPhoto3','')" />
<asp:LinkButton ID="lbUploadPhoto3" runat="server" CssClass="yincang" OnClick="lbUploadPhoto3_Click" ></asp:LinkButton>
藥品質量標準</div>
<div id="imgBox3">
<asp:DataList ID="DataList3" runat="server" BackColor="White"
BorderColor="#E7E7FF" CellPadding="3"
GridLines="Horizontal" Width="99%" onitemcommand="DataList3_ItemCommand" RepeatDirection="Horizontal" RepeatColumns="5">
<AlternatingItemStyle BackColor="#F7F7F7" />
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" BorderColor="black" />
<ItemTemplate >
<table style="border-color:Black">
<tr>
<td style="border-style:none">
<img alt="<%#Eval("imagename") %>" src='<%#Eval("imageurl") %>' style="height:270px ;cursor:hand" οnclick=" $('.layer_con img').prop('src', this.src);layer($(this));"/>
</td>
</tr>
<tr>
<td style="height:40px;width:100px;border-style:none" >
<center> <asp:LinkButton ID="lbDe" CommandArgument=<%#Eval("id") %> CommandName="De" runat="server">刪除</asp:LinkButton></center></td>
</tr>
</table>
</ItemTemplate>
<SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
</asp:DataList>
</div>
</div>
<div id="upBox4">
<div id="inputBox4">
<asp:FileUpload ID="FileUpload4" runat="server" οnchange="javascript:__doPostBack('lbUploadPhoto4','')" />
<asp:LinkButton ID="lbUploadPhoto4" runat="server" CssClass="yincang" OnClick="lbUploadPhoto4_Click" ></asp:LinkButton>
藥品檢驗報告書</div>
<div id="imgBox4">
<asp:DataList ID="DataList4" runat="server" BackColor="White"
BorderColor="#E7E7FF" CellPadding="3"
GridLines="Horizontal" Width="99%" onitemcommand="DataList4_ItemCommand" RepeatDirection="Horizontal" RepeatColumns="5">
<AlternatingItemStyle BackColor="#F7F7F7" />
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" BorderColor="black" />
<ItemTemplate >
<table style="border-color:Black">
<tr>
<td style="border-style:none">
<img alt="<%#Eval("imagename") %>" src='<%#Eval("imageurl") %>' style="height:270px ;cursor:hand" οnclick=" $('.layer_con img').prop('src', this.src);layer($(this));"/>
</td>
</tr>
<tr>
<td style="height:40px;width:100px;border-style:none" >
<center> <asp:LinkButton ID="lbDe" CommandArgument=<%#Eval("id") %> CommandName="De" runat="server">刪除</asp:LinkButton></center></td>
</tr>
</table>
</ItemTemplate>
<SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
</asp:DataList>
</div>
</div>
</div>
<div style=" margin-top:10px; text-align:center; margin-bottom:20px;">
<asp:Button ID="Button1" runat="server" Text="保存" OnClick="Button1_Click" onclientclick="return btnsave_onclick() ; "/><br />
<asp:Label ID="Label1" runat="server" Text="注意:資質不全不要保存" ForeColor="Red"></asp:Label>
</div>
</div>
//大圖的idv
<div class="layer_bg card-layerBg">
</div>
<div class="layer_con card-layerCon">
<div class="layer_main card-layerM">
<img src="" />
</div>
<div class="close">x</div>
</div>
//大圖的div
</form>
</body>
</html>
2、後臺cs代碼
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ProductZiZhiUpload : System.Web.UI.Page
{
ExecuteSql executeSql = new ExecuteSql();
public static System.IO.Stream fileDataStream = null;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
string ccomid= Request.QueryString["comid"];
HiddenField1.Value = ccomid;
HiddenField2.Value = executeSql.ExecuteSelectFirst("SELECT COMNAME FROM dbo.V_Product where comid='"+ ccomid + "'");
string sql1 = "select CONVERT(VARCHAR(100),endtime,23) AS endtime from prd_product_zizhi where comid='" + ccomid + "'";
DataTable dt1 = executeSql.ExecuteSelectQuery(sql1);
if (dt1 != null && dt1.Rows.Count > 0)
{
tendtime.Text = dt1.Rows[0]["endtime"].ToString();
}
band1();
band2();
band3();
band4();
}
}
protected void lbUploadPhoto_Click(object sender, EventArgs e)
{
fileUpload();
}
protected void lbUploadPhoto2_Click(object sender, EventArgs e)
{
fileUpload2();
}
protected void lbUploadPhoto3_Click(object sender, EventArgs e)
{
fileUpload3();
}
protected void lbUploadPhoto4_Click(object sender, EventArgs e)
{
fileUpload4();
}
//從控件上傳文件1
public void fileUpload()
{
fileDataStream = FileUpload1.PostedFile.InputStream;
System.Drawing.Image image = System.Drawing.Image.FromStream(fileDataStream);//從上傳文件流中實例化Image類
float w = image.HorizontalResolution;//獲取上傳文件的水平分辨率(以“像素/英寸”爲單位)。
float w1 = image.Width;
float h1 = image.Height;
//float h = image.VerticalResolution;//獲取上傳文件的垂直分辨率(以“像素/英寸”爲單位)。
if (w>71.9)//這裏限制了分辨率必須大於72的,這裏可以不限制
{
if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.ContentLength > 0 && FileUpload1.PostedFile.ContentLength < 1024 * 1024 * 5)//最大不超過5M
{
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower();
if (ext != ".jpg" && ext != ".jepg" && ext != ".bmp" && ext != ".gif" && ext != ".png")
{
return;
}
string filename = "Image_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ext;
string path = "~/upload/tupian1/" + filename;
FileUpload1.PostedFile.SaveAs(Server.MapPath(path));
string imageurl = "upload/tupian1/" + filename;
string newimageurl = imageurl;
newimageurl = newimageurl.Replace("Image_", "yasuoImage_");
string insql = "insert into prd_file(typeid,comid,imagename,imageurl,newimageurl,isok,imagetitle) "
+ " values(1,'" + HiddenField1.Value + "','" + filename + "','" + imageurl + "','"+ newimageurl+ "',0,'"+HiddenField2.Value+ "_藥品生產批件')";
executeSql.UpdateHrd_qxCount(insql);
string spath = Server.MapPath(path);
yasuo(spath, w1, h1);//這裏上傳後同時生成一張 96像素的標準大小圖片,如果沒有這個業務可以刪除這段代碼
band1();
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('上傳文件不能大於5M!');</script>");
// Response.Write("<Script>alert('上傳文件不能大於5M!');history.go(-2);</Script>");
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('圖片分辨率不能小於72dpi!');</script>");
}
}
//從控件上傳文件2
public void fileUpload2()
{
fileDataStream = FileUpload2.PostedFile.InputStream;
System.Drawing.Image image = System.Drawing.Image.FromStream(fileDataStream);//從上傳文件流中實例化Image類
float w = image.HorizontalResolution;//獲取上傳文件的水平分辨率(以“像素/英寸”爲單位)。
float w1 = image.Width;
float h1 = image.Height;
//float h = image.VerticalResolution;//獲取上傳文件的垂直分辨率(以“像素/英寸”爲單位)。
if (w > 71.9)
{
if (FileUpload2.PostedFile != null && FileUpload2.PostedFile.ContentLength > 0 && FileUpload2.PostedFile.ContentLength < 1024 * 1024 * 5)
{
string ext = System.IO.Path.GetExtension(FileUpload2.PostedFile.FileName).ToLower();
if (ext != ".jpg" && ext != ".jepg" && ext != ".bmp" && ext != ".gif" && ext != ".png")
{
return;
}
string filename = "Image_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ext;
string path = "~/upload/tupian2/" + filename;
FileUpload2.PostedFile.SaveAs(Server.MapPath(path));
string imageurl = "upload/tupian2/" + filename;
string newimageurl = imageurl;
newimageurl = newimageurl.Replace("Image_", "yasuoImage_");
string insql = "insert into prd_file(typeid,comid,imagename,imageurl,newimageurl,isok,imagetitle) "
+ " values(2,'" + HiddenField1.Value + "','" + filename + "','" + imageurl + "','" + newimageurl + "',0,'"+HiddenField2.Value+ "_包裝及說明書')";
executeSql.UpdateHrd_qxCount(insql);
string spath = Server.MapPath(path);
yasuo(spath, w1, h1);
band2();
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('上傳文件不能大於5M!');</script>");
// Response.Write("<Script>alert('上傳文件不能大於5M!');history.go(-2);</Script>");
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('圖片分辨率不能小於72dpi!');</script>");
}
}
//從控件上傳文件3
public void fileUpload3()
{
fileDataStream = FileUpload3.PostedFile.InputStream;
System.Drawing.Image image = System.Drawing.Image.FromStream(fileDataStream);//從上傳文件流中實例化Image類
float w = image.HorizontalResolution;//獲取上傳文件的水平分辨率(以“像素/英寸”爲單位)。
float w1 = image.Width;
float h1 = image.Height;
//float h = image.VerticalResolution;//獲取上傳文件的垂直分辨率(以“像素/英寸”爲單位)。
if (w > 71.9)
{
if (FileUpload3.PostedFile != null && FileUpload3.PostedFile.ContentLength > 0 && FileUpload3.PostedFile.ContentLength < 1024 * 1024 * 5)
{
string ext = System.IO.Path.GetExtension(FileUpload3.PostedFile.FileName).ToLower();
if (ext != ".jpg" && ext != ".jepg" && ext != ".bmp" && ext != ".gif" && ext != ".png")
{
return;
}
string filename = "Image_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ext;
string path = "~/upload/tupian3/" + filename;
FileUpload3.PostedFile.SaveAs(Server.MapPath(path));
string imageurl = "upload/tupian3/" + filename;
string newimageurl = imageurl;
newimageurl = newimageurl.Replace("Image_", "yasuoImage_");
string insql = "insert into prd_file(typeid,comid,imagename,imageurl,newimageurl,isok,imagetitle) "
+ " values(3,'" + HiddenField1.Value + "','" + filename + "','" + imageurl + "','" + newimageurl + "',0,'"+HiddenField2.Value+ "_質量標準')";
executeSql.UpdateHrd_qxCount(insql);
string spath = Server.MapPath(path);
yasuo(spath, w1, h1);
band3();
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('上傳文件不能大於5M!');</script>");
//Response.Write("<Script>alert('上傳文件不能大於5M!');history.go(-2);</Script>");
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('圖片分辨率不能小於72dpi!');</script>");
}
}
//從控件上傳文件4
public void fileUpload4()
{
fileDataStream = FileUpload4.PostedFile.InputStream;
System.Drawing.Image image = System.Drawing.Image.FromStream(fileDataStream);//從上傳文件流中實例化Image類
float w = image.HorizontalResolution;//獲取上傳文件的水平分辨率(以“像素/英寸”爲單位)。
float w1 = image.Width;
float h1 = image.Height;
//float h = image.VerticalResolution;//獲取上傳文件的垂直分辨率(以“像素/英寸”爲單位)。
if (w > 71.9 )
{
if (FileUpload4.PostedFile != null && FileUpload4.PostedFile.ContentLength > 0 && FileUpload4.PostedFile.ContentLength < 1024 * 1024 * 5)
{
string ext = System.IO.Path.GetExtension(FileUpload4.PostedFile.FileName).ToLower();
if (ext != ".jpg" && ext != ".jepg" && ext != ".bmp" && ext != ".gif" && ext != ".png")
{
return;
}
string filename = "Image_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ext;
string path = "~/upload/tupian4/" + filename;
FileUpload4.PostedFile.SaveAs(Server.MapPath(path));
string imageurl = "upload/tupian4/" + filename;
string newimageurl = imageurl;
newimageurl = newimageurl.Replace("Image_", "yasuoImage_");
string insql = "insert into prd_file(typeid,comid,imagename,imageurl,newimageurl,isok,imagetitle) "
+ " values(4,'" + HiddenField1.Value + "','" + filename + "','" + imageurl + "','" + newimageurl + "',0,'"+HiddenField2.Value+ "_檢驗報告')";
executeSql.UpdateHrd_qxCount(insql);
string spath = Server.MapPath(path);
yasuo(spath, w1, h1);
band4();
}
else
{
// Response.Write("<Script>alert('上傳文件不能大於5M!');history.go(-2);</Script>");
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('上傳文件不能大於5M!');</script>");
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('圖片分辨率不能小於72dpi!');</script>");
}
}
protected void band1()
{
string sql1 = "select id,imagename,imageurl from prd_file where typeid=1 and comid='" + HiddenField1.Value + "'";
DataTable dt1 = executeSql.ExecuteSelectQuery(sql1);
this.CFlist.DataSource = dt1;
this.CFlist.DataBind();
}
protected void band2()
{
string sql1 = "select id,imagename,imageurl from prd_file where typeid=2 and comid='" + HiddenField1.Value + "'";
DataTable dt1 = executeSql.ExecuteSelectQuery(sql1);
this.DataList2.DataSource = dt1;
this.DataList2.DataBind();
}
protected void band3()
{
string sql1 = "select id,imagename,imageurl from prd_file where typeid=3 and comid='" + HiddenField1.Value + "'";
DataTable dt1 = executeSql.ExecuteSelectQuery(sql1);
this.DataList3.DataSource = dt1;
this.DataList3.DataBind();
}
protected void band4()
{
string sql1 = "select id,imagename,imageurl from prd_file where typeid=4 and comid='" + HiddenField1.Value + "'";
DataTable dt1 = executeSql.ExecuteSelectQuery(sql1);
this.DataList4.DataSource = dt1;
this.DataList4.DataBind();
}
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
string type = e.CommandName.ToString();
string Id = e.CommandArgument.ToString();
if (type == "De")
{
string sql1 = "delete from prd_file where id="+ Id;
int num = executeSql.UpdateHrd_qxCount(sql1);
if (num > 0)
{
band1();
}
else
{
}
}
else if (type == "Ed")
{
}
}
protected void DataList2_ItemCommand(object source, DataListCommandEventArgs e)
{
string type = e.CommandName.ToString();
string Id = e.CommandArgument.ToString();
if (type == "De")
{
string sql1 = "delete from prd_file where id=" + Id;
int num = executeSql.UpdateHrd_qxCount(sql1);
if (num > 0)
{
band2();
}
else
{
}
}
else if (type == "Ed")
{
}
}
protected void DataList3_ItemCommand(object source, DataListCommandEventArgs e)
{
string type = e.CommandName.ToString();
string Id = e.CommandArgument.ToString();
if (type == "De")
{
string sql1 = "delete from prd_file where id=" + Id;
int num = executeSql.UpdateHrd_qxCount(sql1);
if (num > 0)
{
band3();
}
else
{
}
}
else if (type == "Ed")
{
}
}
protected void DataList4_ItemCommand(object source, DataListCommandEventArgs e)
{
string type = e.CommandName.ToString();
string Id = e.CommandArgument.ToString();
if (type == "De")
{
string sql1 = "delete from prd_file where id=" + Id;
int num = executeSql.UpdateHrd_qxCount(sql1);
if (num > 0)
{
band4();
}
else
{
}
}
else if (type == "Ed")
{
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string sql1 = "IF NOT EXISTS(select * from prd_product_zizhi WHERE comid = '"+HiddenField1.Value+"') "
+ " BEGIN "
+ " INSERT INTO prd_product_zizhi(comid, state, endtime) VALUES('" + HiddenField1.Value + "', 1, '"+ tendtime.Text+ "') "
+ " END "
+ " ELSE "
+ " BEGIN "
+ " UPDATE prd_product_zizhi SET endtime = '" + tendtime.Text + "', state =1 WHERE comid = '" + HiddenField1.Value + "' "
+ " END ";
int i= executeSql.UpdateHrd_qxCount(sql1);
if(i>0)
{
string zhang = "~/upload/zhang/ceshizhang.png";
string zhangpath = Server.MapPath(zhang);
string selsql = "select id,newimageurl from prd_file where comid='"+HiddenField1.Value+"' and isok=0";
DataTable dt1 = executeSql.ExecuteSelectQuery(selsql);
if (dt1 != null && dt1.Rows.Count > 0)
{
for(int j=0;j< dt1.Rows.Count; j++)
{
string id = dt1.Rows[j]["id"].ToString();
string newimageurl = dt1.Rows[j]["newimageurl"].ToString();
string yuan = "~/"+ newimageurl;
string yuanpath = Server.MapPath(yuan);
ImgWater iw = new ImgWater();
iw.gaizhang(yuanpath, zhangpath);
string newimageurl1 = newimageurl;
string daizhang= newimageurl1.Replace("yasuoImage_", "zhangImage_");
executeSql.UpdateHrd_qxCount("update prd_file set newimageurl='"+ daizhang + "',isok=1 where id="+id);
}
}
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('成功!');</script>");
//Response.Write("<Script>alert('成功!');history.go(-2);</Script>");
}else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('失敗!');</script>");
//Response.Write("<Script>alert('失敗!');history.go(-2);</Script>");
}
}
//圖片統一處理代碼,寬度大於1500像素改成1500,小於1500的不處理,處理後圖片分辨率是96
protected void yasuo(string sFile, float w, float h)
{
string sFile2 = sFile;
string dFile = sFile2.Replace("Image_", "yasuoImage_");
int flag = 100;
float w2 = w;
float h2 = h;
if (w > 1500.0)
{
w2 = w * 1500.0f / w;
h2 = h * 1500.0f / w;
}
GetPicThumbnail(sFile, dFile, (int)(w2), (int)(h2), 100);
}
/// 壓縮圖片公用方法
/// <param name="sFile">原圖片</param>
/// <param name="dFile">壓縮後保存位置</param>
/// <param name="dHeight">高度</param>
/// <param name="dWidth"></param>
/// <param name="flag">壓縮質量(數字越小壓縮率越高) 1-100</param>
/// <returns></returns>
protected static bool GetPicThumbnail(string sFile, string dFile, int dWidth, int dHeight, int flag)
{
System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);
ImageFormat tFormat = iSource.RawFormat;
int sW = 0, sH = 0;
//按比例縮放
Size tem_size = new Size(iSource.Width, iSource.Height);
if (tem_size.Width > dHeight || tem_size.Width > dWidth)
{
if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth))
{
sW = dWidth;
sH = (dWidth * tem_size.Height) / tem_size.Width;
}
else
{
sH = dHeight;
sW = (tem_size.Width * dHeight) / tem_size.Height;
}
}
else
{
sW = tem_size.Width;
sH = tem_size.Height;
}
Bitmap ob = new Bitmap(dWidth, dHeight);
Graphics g = Graphics.FromImage(ob);
g.Clear(Color.WhiteSmoke);
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
g.Dispose();
//以下代碼爲保存圖片時,設置壓縮質量
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[1];
qy[0] = flag;//設置壓縮的比例1-100
EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
try
{
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo = null;
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals("JPEG"))
{
jpegICIinfo = arrayICI[x];
break;
}
}
if (jpegICIinfo != null)
{
ob.Save(dFile, jpegICIinfo, ep);//dFile是壓縮後的新路徑
}
else
{
ob.Save(dFile, tFormat);
}
return true;
}
catch
{
return false;
}
finally
{
iSource.Dispose();
ob.Dispose();
}
}
}
3、相關公共類,加水印公共類
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
/// <summary>
///ImgWater 的摘要說明
/// </summary>
public class ImgWater
{
public ImgWater()
{
//
//TODO: 在此處添加構造函數邏輯
//
}
public void gaizhang(string yuanpath,string zhangpath)
{
string yuanpath1 = yuanpath;
string daizhangpath = yuanpath1.Replace("yasuoImage_", "zhangImage_");
zzsImgWater(yuanpath, zhangpath, daizhangpath, 0, 1, 500);
}
/// <summary>
/// 圖片水印
/// </summary>
/// <param name="ImgFile">原圖文件地址</param>
/// <param name="WaterImg">水印圖片地址</param>
/// <param name="sImgPath">水印圖片保存地址</param>
/// <param name="Alpha">水印透明度設置</param>
/// <param name="iScale">水印圖片在原圖上的顯示比例</param>
/// <param name="intDistance">水印圖片在原圖上的邊距確定,以圖片的右邊和下邊爲準,當設定的邊距超過一定大小後參數會自動失效</param>
public bool zzsImgWater(
string ImgFile
, string WaterImg
, string sImgPath
, float Alpha
, float iScale
, int intDistance
)
{
try
{
//裝載圖片
FileStream fs = new FileStream(ImgFile, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] bytes = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);
//System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
int imgPhotoWidth = imgPhoto.Width;
int imgPhotoHeight = imgPhoto.Height;
System.Drawing.Image imgWatermark = new Bitmap(WaterImg);
int imgWatermarkWidth = imgWatermark.Width;
int imgWatermarkHeight = imgWatermark.Height;
//計算水印圖片尺寸
decimal aScale = Convert.ToDecimal(iScale);
decimal pScale = 0.05M;
decimal MinScale = aScale - pScale;
decimal MaxScale = aScale + pScale;
int imgWatermarkWidthNew = imgWatermarkWidth;
int imgWatermarkHeightNew = imgWatermarkHeight;
if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth >= imgPhotoHeight)
if (imgWatermarkWidth > imgWatermarkHeight)
if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))
{
}
else
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);
}
else
if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))
{
}
else
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32((imgPhotoHeight * aScale / imgWatermarkHeight) * imgWatermarkWidth);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth >= imgWatermarkHeight)
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
//if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth <= imgPhotoHeight)
//if (imgWatermarkWidth*2 >= imgWatermarkHeight) {
// if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))
// {
// }
// else
// {
// imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
// imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
// }
//}
//else
//{
//if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))
//{
//}
//else
//{
// imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
// imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
//}
//}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth <= imgWatermarkHeight)
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
//將原圖畫出來
Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(96, 96);
Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gbmPhoto.Clear(Color.White);
gbmPhoto.DrawImage(
imgPhoto
, new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)
, 0
, 0
, imgPhotoWidth
, imgPhotoHeight
, GraphicsUnit.Pixel
);
Bitmap bmWatermark = new Bitmap(bmPhoto);
bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
Graphics gWatermark = Graphics.FromImage(bmWatermark);
//指定高質量顯示水印圖片質量
gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gWatermark.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
ImageAttributes imageAttributes = new ImageAttributes();
//設置兩種顏色,達到合成效果
ColorMap colorMap = new ColorMap();
colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
ColorMap[] remapTable = { colorMap };
imageAttributes.SetRemapTable(remapTable, System.Drawing.Imaging.ColorAdjustType.Bitmap);
//用矩陣設置水印圖片透明度
float[][] colorMatrixElements = {
new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
new float[] {0.0f, 0.0f, 0.0f, Alpha, 0.0f},
new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}
};
System.Drawing.Imaging.ColorMatrix wmColorMatrix = new System.Drawing.Imaging.ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(wmColorMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);
//確定水印邊距
int xPos = imgPhotoWidth - imgWatermarkWidthNew;
int yPos = imgPhotoHeight - imgWatermarkHeightNew;
int xPosOfWm = 0;
int yPosOfWm = 0;
if (xPos > intDistance)
xPosOfWm = xPos - intDistance;
else
xPosOfWm = xPos;
if (yPos > intDistance)
yPosOfWm = yPos - intDistance;
else
yPosOfWm = yPos;
gWatermark.DrawImage(
imgWatermark
, new Rectangle(xPosOfWm, yPosOfWm, imgWatermarkWidthNew, imgWatermarkHeightNew)
, 0
, 0
, imgWatermarkWidth
, imgWatermarkHeight
, GraphicsUnit.Pixel
//, imageAttributes
);
imgPhoto = bmWatermark;
//以jpg格式保存圖片
imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
//銷燬對象
gbmPhoto.Dispose();
gWatermark.Dispose();
imgPhoto.Dispose();
imgWatermark.Dispose();
return true;
}
catch
{
return false;
}
}
/**//// <summary>
/// 文字水印
/// </summary>
/// <param name="ImgFile">原圖文件地址</param>
/// <param name="TextFont">水印文字</param>
/// <param name="sImgPath">文字水印圖片保存地址</param>
/// <param name="hScale">高度位置</param>
/// <param name="widthFont">文字塊在圖片中所佔寬度比例</param>
/// <param name="Alpha">文字透明度 其數值的範圍在0到255</param>
public bool zzsTextWater(
string ImgFile
, string TextFont
, string sImgPath
, float hScale
, float widthFont
, int Alpha
)
{
try
{
FileStream fs = new FileStream(ImgFile, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] bytes = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);
//System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
int imgPhotoWidth = imgPhoto.Width;
int imgPhotoHeight = imgPhoto.Height;
Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(72, 72);
Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gbmPhoto.DrawImage(
imgPhoto
, new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)
, 0
, 0
, imgPhotoWidth
, imgPhotoHeight
, GraphicsUnit.Pixel
);
//建立字體大小的數組,循環找出適合圖片的水印字體
//int[] sizes = new int[] { 1000, 800, 700, 650, 600, 560, 540, 500, 450, 400, 380, 360, 340, 320, 300, 280, 260, 240, 220, 200, 180, 160, 140, 120, 100, 80, 72, 64, 48, 32, 28, 26, 24, 20, 28, 16, 14, 12, 10, 8, 6, 4, 2 };
int[] sizes = new int[] { 28, 26, 24, 20, 16, 14, 12 };
System.Drawing.Font crFont = null;
System.Drawing.SizeF crSize = new SizeF();
for (int i = 0; i < 7; i++)
{
crFont = new Font("微軟雅黑", sizes[i], FontStyle.Bold);
crSize = gbmPhoto.MeasureString(TextFont, crFont);
if ((ushort)crSize.Width < (ushort)imgPhotoWidth * widthFont)
break;
}
//設置水印字體的位置
//int yPixlesFromBottom = (int)(imgPhotoHeight * hScale);
//float yPosFromBottom = ((imgPhotoHeight - yPixlesFromBottom) - (crSize.Height / 2));
//float xCenterOfImg = (imgPhotoWidth * 1 / 2);
float yPosFromBottom = imgPhotoHeight * 0.85f;
float xCenterOfImg = imgPhotoWidth * 0.8f;
//if (xCenterOfImg<crSize.Height)
// xCenterOfImg = (imgPhotoWidth * (1 - (crSize.Height)/ imgPhotoWidth));
System.Drawing.StringFormat StrFormat = new System.Drawing.StringFormat();
StrFormat.Alignment = System.Drawing.StringAlignment.Center;
//
System.Drawing.SolidBrush semiTransBrush2 = new System.Drawing.SolidBrush(Color.FromArgb(Alpha, 0, 0, 0));
gbmPhoto.DrawString(
TextFont
, crFont
, semiTransBrush2
, new System.Drawing.PointF(xCenterOfImg + 1, yPosFromBottom + 1)
, StrFormat
);
System.Drawing.SolidBrush semiTransBrush = new System.Drawing.SolidBrush(Color.FromArgb(Alpha, 255, 255, 255));
//gbmPhoto.FillRectangle(semiTransBrush2, new RectangleF(new PointF(xCenterOfImg - crSize.Width / 2, yPosFromBottom - 4), crSize));
gbmPhoto.DrawString(
TextFont
, crFont
, semiTransBrush
, new System.Drawing.PointF(xCenterOfImg, yPosFromBottom)
, StrFormat
);
bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
gbmPhoto.Dispose();
imgPhoto.Dispose();
bmPhoto.Dispose();
return true;
}
catch
{
return false;
}
}
/**//// <summary>
/// 文字和Logo圖片水印
/// </summary>
/// <param name="ImgFile">原圖文件地址</param>
/// <param name="WaterImg">水印圖片地址</param>
/// <param name="TextFont">水印文字信息</param>
/// <param name="sImgPath">生存水印圖片後的保存地址</param>
/// <param name="ImgAlpha">水印圖片的透明度</param>
/// <param name="imgiScale">水印圖片在原圖上的顯示比例</param>
/// <param name="intimgDistance">水印圖片在原圖上的邊距確定,以圖片的右邊和下邊爲準,當設定的邊距超過一定大小後參數會自動失效</param>
/// <param name="texthScale">水印文字高度位置,從圖片底部開始計算,0-1</param>
/// <param name="textwidthFont">文字塊在圖片中所佔寬度比例 0-1</param>
/// <param name="textAlpha">文字透明度 其數值的範圍在0到255</param>
public void zzsImgTextWater(
string ImgFile
, string WaterImg
, string TextFont
, string sImgPath
, float ImgAlpha
, float imgiScale
, int intimgDistance
, float texthScale
, float textwidthFont
, int textAlpha
)
{
try
{
FileStream fs = new FileStream(ImgFile, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] bytes = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);
//System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
int imgPhotoWidth = imgPhoto.Width;
int imgPhotoHeight = imgPhoto.Height;
Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(72, 72);
Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gbmPhoto.DrawImage(
imgPhoto
, new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)
, 0
, 0
, imgPhotoWidth
, imgPhotoHeight
, GraphicsUnit.Pixel
);
//建立字體大小的數組,循環找出適合圖片的水印字體
int[] sizes = new int[] { 1000, 800, 700, 650, 600, 560, 540, 500, 450, 400, 380, 360, 340, 320, 300, 280, 260, 240, 220, 200, 180, 160, 140, 120, 100, 80, 72, 64, 48, 32, 28, 26, 24, 20, 28, 16, 14, 12, 10, 8, 6, 4, 2 };
System.Drawing.Font crFont = null;
System.Drawing.SizeF crSize = new SizeF();
for (int i = 0; i < 43; i++)
{
crFont = new Font("arial", sizes[i], FontStyle.Bold);
crSize = gbmPhoto.MeasureString(TextFont, crFont);
if ((ushort)crSize.Width < (ushort)imgPhotoWidth * textwidthFont)
break;
}
//設置水印字體的位置
int yPixlesFromBottom = (int)(imgPhotoHeight * texthScale);
float yPosFromBottom = ((imgPhotoHeight - yPixlesFromBottom) - (crSize.Height / 2));
float xCenterOfImg = (imgPhotoWidth * 1 / 2);
System.Drawing.StringFormat StrFormat = new System.Drawing.StringFormat();
StrFormat.Alignment = System.Drawing.StringAlignment.Center;
//
System.Drawing.SolidBrush semiTransBrush2 = new System.Drawing.SolidBrush(Color.FromArgb(textAlpha, 0, 0, 0));
gbmPhoto.DrawString(
TextFont
, crFont
, semiTransBrush2
, new System.Drawing.PointF(xCenterOfImg + 1, yPosFromBottom + 1)
, StrFormat
);
System.Drawing.SolidBrush semiTransBrush = new System.Drawing.SolidBrush(Color.FromArgb(textAlpha, 255, 255, 255));
gbmPhoto.DrawString(
TextFont
, crFont
, semiTransBrush
, new System.Drawing.PointF(xCenterOfImg, yPosFromBottom)
, StrFormat
);
System.Drawing.Image imgWatermark = new Bitmap(WaterImg);
int imgWatermarkWidth = imgWatermark.Width;
int imgWatermarkHeight = imgWatermark.Height;
//計算水印圖片尺寸
decimal aScale = Convert.ToDecimal(imgiScale);
decimal pScale = 0.05M;
decimal MinScale = aScale - pScale;
decimal MaxScale = aScale + pScale;
int imgWatermarkWidthNew = imgWatermarkWidth;
int imgWatermarkHeightNew = imgWatermarkHeight;
if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth >= imgPhotoHeight)
if (imgWatermarkWidth > imgWatermarkHeight)
if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))
{
}
else
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);
}
else
if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))
{
}
else
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32((imgPhotoHeight * aScale / imgWatermarkHeight) * imgWatermarkWidth);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth >= imgWatermarkHeight)
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth <= imgPhotoHeight)
if (imgWatermarkWidth > imgWatermarkHeight)
if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))
{
}
else
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
else
if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))
{
}
else
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth <= imgWatermarkHeight)
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)
{
imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);
}
if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)
{
imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);
imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);
}
//將原圖畫出來
Bitmap bmWatermark = new Bitmap(bmPhoto);
bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
Graphics gWatermark = Graphics.FromImage(bmWatermark);
//指定高質量顯示水印圖片質量
gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gWatermark.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
System.Drawing.Imaging.ImageAttributes imageAttributes = new System.Drawing.Imaging.ImageAttributes();
//設置兩種顏色,達到合成效果
System.Drawing.Imaging.ColorMap colorMap = new System.Drawing.Imaging.ColorMap();
colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
System.Drawing.Imaging.ColorMap[] remapTable = { colorMap };
imageAttributes.SetRemapTable(remapTable, System.Drawing.Imaging.ColorAdjustType.Bitmap);
//用矩陣設置水印圖片透明度
float[][] colorMatrixElements = {
new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
new float[] {0.0f, 0.0f, 0.0f, ImgAlpha, 0.0f},
new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}
};
System.Drawing.Imaging.ColorMatrix wmColorMatrix = new System.Drawing.Imaging.ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(wmColorMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);
//確定水印邊距
int xPos = imgPhotoWidth - imgWatermarkWidthNew;
int yPos = imgPhotoHeight - imgWatermarkHeightNew;
int xPosOfWm = 0;
int yPosOfWm = 0;
if (xPos > intimgDistance)
xPosOfWm = xPos - intimgDistance;
else
xPosOfWm = xPos;
if (yPos > intimgDistance)
yPosOfWm = yPos - intimgDistance;
else
yPosOfWm = yPos;
gWatermark.DrawImage(
imgWatermark
, new Rectangle(xPosOfWm, yPosOfWm, imgWatermarkWidthNew, imgWatermarkHeightNew)
, 0
, 0
, imgWatermarkWidth
, imgWatermarkHeight
, GraphicsUnit.Pixel
, imageAttributes
);
imgPhoto = bmWatermark;
//以jpg格式保存圖片
imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
//銷燬對象
gbmPhoto.Dispose();
gWatermark.Dispose();
bmPhoto.Dispose();
imgPhoto.Dispose();
imgWatermark.Dispose();
}
catch
{
}
}
/**//// <summary>
/// 縮略圖
/// </summary>
/// <param name="ImgFile">原圖文件地址</param>
/// <param name="sImgPath">縮略圖保存地址</param>
/// <param name="ResizeWidth">縮略圖寬度</param>
/// <param name="ResizeHeight">縮略圖高度</param>
/// <param name="BgColor">縮略圖背景顏色,注意,背景顏色只能指定KnownColor中的值,如blue,red,green等</param>
public bool zzsResizeImg(string ImgFile, string sImgPath, int ResizeWidth, int ResizeHeight, string BgColor)
{
try
{
FileStream fs = new FileStream(ImgFile, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] bytes = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);
//System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
int imgPhotoWidth = imgPhoto.Width;
int imgPhotoHeight = imgPhoto.Height;
int startX = 0;
int StartY = 0;
int NewWidth = 0;
int NewHeight = 0;
if (imgPhotoWidth >= ResizeWidth && imgPhotoHeight >= ResizeHeight)
{
NewWidth = ResizeWidth;
NewHeight = Convert.ToInt32(imgPhotoHeight * Math.Round(Convert.ToDecimal(ResizeWidth) / Convert.ToDecimal(imgPhotoWidth), 10));
startX = 0;
StartY = (ResizeHeight - NewHeight) / 2;
}
if (ResizeWidth > imgPhotoWidth && ResizeHeight < imgPhotoHeight)
{
NewHeight = ResizeHeight;
NewWidth = Convert.ToInt32(imgPhotoWidth * Math.Round(Convert.ToDecimal(ResizeHeight) / Convert.ToDecimal(imgPhotoHeight), 10));
startX = (ResizeWidth - NewWidth) / 2;
StartY = 0;
}
if (ResizeWidth < imgPhotoWidth && ResizeHeight > imgPhotoHeight)
{
NewWidth = ResizeWidth;
NewHeight = Convert.ToInt32(imgPhotoHeight * Math.Round(Convert.ToDecimal(ResizeWidth) / Convert.ToDecimal(imgPhotoWidth), 10));
startX = 0;
StartY = (ResizeHeight - NewHeight) / 2;
}
if (imgPhotoWidth < ResizeWidth && imgPhotoHeight < ResizeHeight)
{
NewWidth = imgPhotoWidth;
NewHeight = imgPhotoHeight;
startX = (ResizeWidth - imgPhotoWidth) / 2;
StartY = (ResizeHeight - imgPhotoHeight) / 2;
}
//計算縮放圖片尺寸
Bitmap bmPhoto = new Bitmap(ResizeWidth, ResizeHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(72, 72);
Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.Clear(Color.FromName(BgColor));
gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gbmPhoto.DrawImage(
imgPhoto
, new Rectangle(startX, StartY, NewWidth, NewHeight)
, new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)
, GraphicsUnit.Pixel
);
bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
imgPhoto.Dispose();
gbmPhoto.Dispose();
bmPhoto.Dispose();
ms.Close();
return true;
}
catch
{
return false;
}
}
/**//// <summary>
/// 圖片剪切
/// </summary>
/// <param name="ImgFile">原圖文件地址</param>
/// <param name="sImgPath">縮略圖保存地址</param>
/// <param name="PointX">剪切起始點 X座標</param>
/// <param name="PointY">剪切起始點 Y座標</param>
/// <param name="CutWidth">剪切寬度</param>
/// <param name="CutHeight">剪切高度</param>
public bool zzsCutImg(string ImgFile, string sImgPath, int PointX, int PointY, int CutWidth, int CutHeight)
{
FileStream fs = new FileStream(ImgFile, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
try
{
byte[] bytes = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);
//System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
//此處只能用filestream,用 System.Drawing.Image則會報多過進程訪問文件的錯誤,會鎖定文件
Bitmap bmPhoto = new Bitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(72, 72);
Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gbmPhoto.DrawImage(
imgPhoto
, new Rectangle(0, 0, CutWidth, CutHeight)
, new Rectangle(PointX, PointY, CutHeight, CutHeight)
, GraphicsUnit.Pixel
);
bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
imgPhoto.Dispose();
gbmPhoto.Dispose();
bmPhoto.Dispose();
ms.Close();
return true;
}
catch
{
return false;
}
finally
{
}
}
}