.net保存远程图片并生成缩略图,添加水印
一个<input type="text" name="fileurl" value="" />它的值是一张图片的地址:如http://c.csdn.net/bbs/t/5/i/pic_logo.gif
提交到后台。
要怎么处理?
private bool RemoteFileExists(string fileUrl)
{
bool result = false;//下载结果
HttpWebResponse response = null;
HttpWebRequest req = null;
try
{
req = WebRequest.Create(fileUrl) as HttpWebRequest;
response = req.GetResponse() as HttpWebResponse; // 报异常无法解析次域名
result = response.StatusCode == HttpStatusCode.OK ? true : false;
}
catch (Exception ex)
{
result = false;
}
finally
{
if (response != null)
{
response.Close();
}
if (req != null)
{
req.Abort();
}
}
return result;
}
报异常无法解析次域名
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(fileurl);
报错:不支持的URI格式 --------------------编程问答-------------------- --------------------编程问答-------------------- 在线等 --------------------编程问答-------------------- 解析域名,要等待服务器的响应吧。你让程序休息一两秒看看。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 期待高手来哦,哈哈 --------------------编程问答-------------------- 围观,看看高手解答 --------------------编程问答-------------------- 加水印,应该在服务器上有要加水印的图片,然后可以使用aspjpeg这件组件添加水印。 --------------------编程问答-------------------- 没弄过,帮顶下 --------------------编程问答--------------------
对啊,把text改成FileUpload,先将图片传至服务器
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
int towidth = width;
int toheight = height;
int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
switch (mode)
{
case "HW"://指定高宽缩放(可能变形)
break;
case "W"://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
}
//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
//新建一个画板
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(System.Drawing.Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
new System.Drawing.Rectangle(x, y, ow, oh),
System.Drawing.GraphicsUnit.Pixel);
try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
/// <summary>
/// 在图片上增加文字水印
/// </summary>
/// <param name="Path">原服务器图片路径</param>
/// <param name="Path_sy">生成的带文字水印的图片路径</param>
public static void AddWater(string Path, string Path_sy)
{
string addText = "我要加水印的文字";
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(image, 0, 0, image.Width, image.Height);
System.Drawing.Font f = new System.Drawing.Font("Arial", 9);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
g.DrawString(addText, f, b, 1, 90);
g.Dispose();
image.Save(Path_sy);
image.Dispose();
}
/**/
/// <summary>
/// 在图片上生成图片水印
/// </summary>
/// <param name="Path">原服务器图片路径</param>
/// <param name="Path_syp">生成的带图片水印的图片路径</param>
/// <param name="Path_sypf">水印图片路径</param>
public static void AddWaterPic(string Path, string Path_syp, string Path_sypf)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
image.Save(Path_syp);
image.Dispose();
}
--------------------编程问答-------------------- 围观,看看高手解答 --------------------编程问答--------------------
up --------------------编程问答-------------------- 这是个图片处理的问题
给你一些常用方法:
图片
public static void DrawImage(Image image, Image drawImage, float x, float y, int width, int height)
{
using (Graphics gra = Graphics.FromImage(image))
{
gra.DrawImage(drawImage, x, y, width, height);
}
}
public static void DrawImage(Image image, Image drawImage, float x, float y)
{
using (Graphics gra = Graphics.FromImage(image))
{
gra.DrawImage(drawImage, x, y);
}
}
文字
public static void DrawString(Image image, string s, PointF point, Color color, FontFamily family, int size)
{
SolidBrush bru = new SolidBrush(color);
Font font = new Font(family, size, FontStyle.Bold);
using (Graphics gra = Graphics.FromImage(image))
{
gra.DrawString(s, font, bru, point);
}
}
public static Image DrawString(string path, string s, PointF point, Color color, FontFamily family, int size)
{
Image image = Image.FromFile(path);
DrawHelper.DrawString(image, s, point, color, family, size);
return image;
}
黑白
public static void GrayImage(Bitmap image)
{
Color color;
int iColor = 0;
for (int i = 0; i < image.Width; i++)
{
for (int j = 0; j < image.Height; j++)
{
color = image.GetPixel(i, j);
iColor = (((int)color.R) + ((int)color.R) + ((int)color.R)) / 3; ;
color = Color.FromArgb(iColor, iColor, iColor);
image.SetPixel(i, j, color);
}
}
}
图片大小
public static Image ChangeImage(Image image, int width, int height)
{
Image.GetThumbnailImageAbort call = null;
Image small = image.GetThumbnailImage(width, height, call, new System.IntPtr());
return small;
}
页面用法:
private void Draw()
{
int height = 600, width = 600;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);
g.FillRectangle(Brushes.White, new Rectangle(0, 0, 600, 600));
Pen pen = new Pen(Color.Red, 2);
pen.DashPattern = new float[] { 5, 5 };
pen.DashStyle = DashStyle.Custom;
g.DrawLine(pen, new Point(0, 100), new Point(600, 100));
g.DrawString("Kevien", new Font(new FontFamily("宋体"), 12, FontStyle.Bold | FontStyle.Underline), Brushes.Blue, new PointF(0, 20));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
}
补充:.NET技术 , ASP.NET