背景:项目中商品上传的功能需要对excel中的图片链接进行等比例裁剪(生成大中小图)并保存到图片空间,我是使用base64传输的,然后最近发现webp格式的图片能传过去,但是对保存的图片进行编辑的时候Image.FromFile(originalImagePath)报了个内存不足的错误,发现原始图片确实保存到图片空间了,但是无法裁剪而且无法用图片查看器打开,但是可以用浏览器打开
?
?这样肯定不行呀,于是在网上查了些资料,都没有很全的解决方案,这里把我自己的解决方案记录下,有相同场景,有需要的小伙伴可供参考
===========================================================================
我的场景是:图片链接后缀是jpg的常规的图片格式,但是另存为的时候是webp格式
在网上下载了相关的dll包:
我把下载dll包放在了这里:LibWebP-NET-C#文档类资源-CSDN下载webp转图片的dll资源更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/ML01010736/85017362
首先了Imazen.Webp.dll是要放到你自己的项目packages文件夹里面的,在执行处理图片的类库中引用它,下面是我处理webp转jpg图片的代码,执行到这里的时候报了一个错:
然后通过查找资料发现x64和x86的文件夹里面各自有一个libwebp.dll与上面的报错似乎有某种关联,我又把x64中的dll直接放在了网站根目录bin下,执行后又出现了这个报错
?继续试错,我又把x86中的dll丢到了网站bin下,然后顺利执行通过,并成功保存了图片文件,保存的图片能正常显示缩略图
?进行到这里就完成目标了,后面就可以直接对新保存的这个图片进行裁剪啦。。。。。。
下面贴出我的代码:
/// <summary>
/// Webp图片转img
/// </summary>
/// <param name="url">图片网络连接(https://z.nooncdn.com/tr:n-t_400/v1625131912/N48678957A_1.jpg)</param>
/// <param name="newPath">图片新保存的链接</param>
public static void WebP2Image(string url, string newPath)
{
try
{
//System.Net.WebClient client = new System.Net.WebClient();
//client.DownloadFile(url, newPath);
WebClient mywebclient = new WebClient();
byte[] b = mywebclient.DownloadData(url);
var outBitmap = SimpleDecoder.DecodeFromBytes(b, b.LongLength);
outBitmap.Save(newPath, ImageFormat.Jpeg);
}
catch (Exception ex)
{
throw ex;
}
}
?引用代码的部分,下图中img_store_address就是新图片的地址
var _ext = Path.GetExtension(url).ToLower();
var img_store_address = AppDomain.CurrentDomain.BaseDirectory + "Upload\\Image\\" + Common.GetRandomString(6) + Common.GeneralNumber(GeneralKeyType.ShortYear) + _ext ;
WebHelper.WebP2Image(url, img_store_address);
|