248 lines
9.8 KiB
C#
248 lines
9.8 KiB
C#
|
using Api.Framework.Tools;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Drawing;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Net;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace TBAppraisalTools
|
|||
|
{
|
|||
|
class Tools
|
|||
|
{
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 把directory文件夹里的png文件生成为gif文件,放在giffile
|
|||
|
/// </summary>
|
|||
|
/// <param name="files">图片的数组</param>
|
|||
|
/// <param name="giffile">gif保存路径</param>
|
|||
|
/// <param name="time">每帧的时间/ms</param>
|
|||
|
/// <param name="repeat">是否重复</param>
|
|||
|
public static string PngsToGif(string[] files, string giffile, int time = 0, bool repeat = false)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//一般文件名按顺序排
|
|||
|
AnimatedGifEncoder e = new AnimatedGifEncoder();
|
|||
|
e.Start(giffile);
|
|||
|
//每帧播放时间
|
|||
|
e.SetDelay(time);
|
|||
|
//1:不重复,0:重复
|
|||
|
e.SetRepeat(repeat ? 0 : -1);
|
|||
|
for (int i = 0, count = files.Length; i < count; i++)
|
|||
|
{
|
|||
|
if (!string.IsNullOrEmpty(files[i]) && File.Exists(files[i]))
|
|||
|
e.AddFrame(Tools.ReadImageFile(files[i]));
|
|||
|
}
|
|||
|
e.Finish();
|
|||
|
return giffile;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 按比例缩放图片
|
|||
|
/// </summary>
|
|||
|
/// <param name="SourceImage">图片路径</param>
|
|||
|
/// <param name="TargetWidth">宽度</param>
|
|||
|
/// <param name="TargetHeight">高度</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Image ZoomPicture(Image SourceImage, int TargetWidth, int TargetHeight)
|
|||
|
{
|
|||
|
int IntWidth; //新的图片宽
|
|||
|
int IntHeight; //新的图片高
|
|||
|
try
|
|||
|
{
|
|||
|
System.Drawing.Imaging.ImageFormat format = SourceImage.RawFormat;
|
|||
|
Bitmap SaveImage = new Bitmap(TargetWidth, TargetHeight);
|
|||
|
Graphics g = Graphics.FromImage(SaveImage);
|
|||
|
g.Clear(Color.White);
|
|||
|
if (SourceImage.Width > TargetWidth && SourceImage.Height <= TargetHeight)//宽度比目的图片宽度大,长度比目的图片长度小
|
|||
|
{
|
|||
|
IntWidth = TargetWidth;
|
|||
|
IntHeight = (IntWidth * SourceImage.Height) / SourceImage.Width;
|
|||
|
}
|
|||
|
else if (SourceImage.Width <= TargetWidth && SourceImage.Height > TargetHeight)//宽度比目的图片宽度小,长度比目的图片长度大
|
|||
|
{
|
|||
|
IntHeight = TargetHeight;
|
|||
|
IntWidth = (IntHeight * SourceImage.Width) / SourceImage.Height;
|
|||
|
}
|
|||
|
else if (SourceImage.Width <= TargetWidth && SourceImage.Height <= TargetHeight) //长宽比目的图片长宽都小
|
|||
|
{
|
|||
|
IntHeight = SourceImage.Width;
|
|||
|
IntWidth = SourceImage.Height;
|
|||
|
}
|
|||
|
else//长宽比目的图片的长宽都大
|
|||
|
{
|
|||
|
IntWidth = TargetWidth;
|
|||
|
IntHeight = (IntWidth * SourceImage.Height) / SourceImage.Width;
|
|||
|
if (IntHeight > TargetHeight)//重新计算
|
|||
|
{
|
|||
|
IntHeight = TargetHeight;
|
|||
|
IntWidth = (IntHeight * SourceImage.Width) / SourceImage.Height;
|
|||
|
}
|
|||
|
}
|
|||
|
g.DrawImage(SourceImage, (TargetWidth - IntWidth) / 2, (TargetHeight - IntHeight) / 2, IntWidth, IntHeight);
|
|||
|
SourceImage.Dispose();
|
|||
|
return SaveImage;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 通过FileStream 来打开文件,这样就可以实现不锁定Image文件,到时可以让多用户同时访问Image文件
|
|||
|
/// </summary>
|
|||
|
/// <param name="path"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Bitmap ReadImageFile(string path)
|
|||
|
{
|
|||
|
FileStream fs = File.OpenRead(path); //OpenRead
|
|||
|
int filelength = 0;
|
|||
|
filelength = (int)fs.Length; //获得文件长度
|
|||
|
Byte[] image = new Byte[filelength]; //建立一个字节数组
|
|||
|
fs.Read(image, 0, filelength); //按字节流读取
|
|||
|
Image result = Image.FromStream(fs);
|
|||
|
fs.Close();
|
|||
|
Bitmap bit = new Bitmap(result);
|
|||
|
return bit;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 下载网络图片
|
|||
|
/// </summary>
|
|||
|
/// <param name="url">图片的链接</param>
|
|||
|
/// <param name="path">下载图片保存的路径</param>
|
|||
|
/// <param name="postfix"></param>
|
|||
|
public static void DownloadImage(string url, string path)
|
|||
|
{
|
|||
|
HttpWebResponse rsp = null;
|
|||
|
try
|
|||
|
{
|
|||
|
url = (url.StartsWith("http") ? url : ("http:" + url));
|
|||
|
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
|
|||
|
req.ServicePoint.Expect100Continue = false;
|
|||
|
req.Method = "GET";
|
|||
|
req.KeepAlive = true;
|
|||
|
req.ContentType = "image/*";
|
|||
|
rsp = (HttpWebResponse)req.GetResponse();
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
Stream stream = null;
|
|||
|
try
|
|||
|
{
|
|||
|
// 以字符流的方式读取HTTP响应
|
|||
|
stream = rsp.GetResponseStream();
|
|||
|
Image.FromStream(stream).Save(path);
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
if (stream != null) stream.Close();
|
|||
|
if (rsp != null) rsp.Close();
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
// 释放资源
|
|||
|
if (stream != null) stream.Close();
|
|||
|
if (rsp != null) rsp.Close();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 图片放大缩小 变形操作
|
|||
|
/// </summary>
|
|||
|
/// <param name="img"></param>
|
|||
|
/// <param name="rec"></param>
|
|||
|
/// <param name="size"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Bitmap CutEllipse(Image img, Rectangle rec, Size size)
|
|||
|
{
|
|||
|
Bitmap bitmap = new Bitmap(size.Width, size.Height);
|
|||
|
using (Graphics g = Graphics.FromImage(bitmap))
|
|||
|
{
|
|||
|
using (TextureBrush br = new TextureBrush(img, System.Drawing.Drawing2D.WrapMode.Clamp, rec))
|
|||
|
{
|
|||
|
br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);
|
|||
|
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
|||
|
g.FillEllipse(br, new Rectangle(Point.Empty, size));
|
|||
|
//g.FillRectangle(br, new Rectangle(Point.Empty, size));
|
|||
|
}
|
|||
|
}
|
|||
|
return bitmap;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 这方法将以前的地址更新成新的目录地址(防止用户更改了软件目录)
|
|||
|
/// </summary>
|
|||
|
/// <param name="currentFile">之前完整的路径</param>
|
|||
|
/// <param name="node">查找的节点(文件名前的那一段内容)</param>
|
|||
|
/// <param name="newPath">软件的目录</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string RefreshFileAddress(string currentFile, string node, string newPath)
|
|||
|
{
|
|||
|
var index = currentFile.IndexOf(node);
|
|||
|
var imageNick = currentFile.Remove(0, index + node.Length);//获取图片名和后缀
|
|||
|
return Util.MapFile(imageNick, newPath);//当前项目的完成图片路径(以上操作是为了怕用户转移程序路径)
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 更新文本格式,优惠券模板中label超出背景部分自动换行(比如标题过长)
|
|||
|
/// </summary>
|
|||
|
/// <param name="totalWidth">总背景的宽</param>
|
|||
|
/// <param name="startPoint">文本的X坐标(起点)</param>
|
|||
|
/// <param name="srcText">文本内容</param>
|
|||
|
/// <param name="tWidth">格式化后的文本真正的宽</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string RefreshTextFormat(int totalWidth, int startPoint, string srcText, float tWidth)
|
|||
|
{
|
|||
|
var surLocation = totalWidth - startPoint;
|
|||
|
if (surLocation < tWidth)
|
|||
|
{
|
|||
|
var nuit = Math.Ceiling(tWidth / srcText.Length);//一个字的宽度
|
|||
|
var rowNum = (int)Math.Ceiling(surLocation / nuit);//大约一列最多能放几个字
|
|||
|
double rows = srcText.Length / rowNum;//行数
|
|||
|
int count = (int)Math.Ceiling(rows);
|
|||
|
|
|||
|
for (var i = 1; i <= count; i++)
|
|||
|
{
|
|||
|
srcText = srcText.Insert(rowNum * i, "\r\n");
|
|||
|
}
|
|||
|
}
|
|||
|
return srcText;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 通过路径删除所有的文件,以及文件夹
|
|||
|
/// </summary>
|
|||
|
/// <param name="srcPath"></param>
|
|||
|
public static void DelectDir(string srcPath)
|
|||
|
{
|
|||
|
DirectoryInfo dir = new DirectoryInfo(srcPath);
|
|||
|
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
|
|||
|
foreach (FileSystemInfo i in fileinfo)
|
|||
|
{
|
|||
|
if (i is DirectoryInfo) //判断是否文件夹
|
|||
|
{
|
|||
|
DirectoryInfo subdir = new DirectoryInfo(i.FullName);
|
|||
|
subdir.Delete(true); //删除子目录和文件
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
File.Delete(i.FullName); //删除指定文件
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|