C# 下 Webp格式转jpg格式详解

背景:项目中商品上传的功能需要对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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值