思路来源:webp文件转换用别人工具总不太如意,就想一点即转,动手DIY一个
资料:找了一些资料无法实现,介绍信息不全(未介绍引用组件等问题),c#无法实现
效果:webp图片拖到软件中,直接生成到原目录中(文件格式可选jpg或png)
如果不选择“自动保存到原路径”将弹出保存对话框。默认文件保存格式*.jpg
实现步骤:
1)引用组件 Imazen.WebP
有关依赖文件包见下载页(分x86和x64版)工具+组件+libwebp.dllhttps://download.csdn.net/download/uaime/87258672?spm=1001.2014.3001.5503
说明:写的无依赖性,实际安装之后是无法运行的。有相关资料,缺少libwebp.dll造成的。
using Imazen.WebP;
核心代码:
public Image webp2image(string oldp,string newp)
{
try
{
byte[] b = File.ReadAllBytes(oldp);
var decoder = new SimpleDecoder();
var outbitmap = decoder.DecodeFromBytes(b, b.LongLength);
outbitmap.Save(newp, pictype);//直接保存
return outbitmap;//用pictureBox回显
}
catch(Exception ex)
{
return null;//必须libwebp.dll否则报错
}
}
图片框实现:拖入即转功能的实现方法
private void pic_view_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Link;
else e.Effect = DragDropEffects.None;
}
private void pic_view_DragDrop(object sender, DragEventArgs e)
{
try
{
string fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
if (fileName.ToLower().EndsWith(".webp"))
{
int addr = fileName.LastIndexOf("\\");
file_name = fileName.Substring(addr+1, fileName.Length - addr-2- _pictype.Length);//不带扩展名
file_path = fileName.Substring(0, addr);//使用原路径方法
this.txt_url.Text = file_path;//回显路径
file_ext = ".webp";//记录类型(全局变量)
}
if (chk_src_path.Checked)
{//原路径
file_path = String.Format(@"{0}\{1}{2}", file_path, file_name, _pictype);
}
else
{//自定义保存路径及文件名称
SaveFileDialog ofd = new SaveFileDialog();
ofd.Filter = "Jpeg(*.jpg)|*.jpg|png(*.png)|*.png";
ofd.RestoreDirectory = true;//记忆
ofd.FileName = string.Format("{0:MMddHHmmssfff}",DateTime.Now);
if (ofd.ShowDialog()==DialogResult.OK)
{
file_path = ofd.FileName;//ofd.safefilename
}
}
this.pic_view.Image = webp2image(fileName, file_path);// Image.FromFile(fileName);
}
catch { }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)