关于.netcore即时生成缩略图踩的坑

最近在开发一套系统,很多地方用到了缩略图,然而不同的地方用到的尺寸又不一样,上传的时候生成缩略图就没有意义了,因为你不知道会使用到哪些尺寸,于是想到即时生成的办法,前端判断图片是否存在,如果不存在则调用接口生成缩略图,同时接口返回缩略图的数据流。

本来功能都开发完成,可以达到目的,但是在会员头像使用Png生成缩略图是遇到了一个问题,就是生成的缩略图不是透明的,变成黑底色了。更奇怪的问题是并不是所有png图片都这样,同一张图片在不同的地方也有不一样的效果。

没有修改之前的代码如下:

csharp;gutter:true; /// /// 访问图片,接口调用方式 https://您的域名/WebApi/common/200/image%2F2022-06%2Fbb372369c3ad4d458ad2aee6c00ca4bd.png      ///其中200是图片宽度,后面是图片的相对路径 /// /// 所访问图片的宽度,高度自动缩放,大于原图尺寸或者小于等于0返回原图 /// 所要访问图片的名称或者相对地址 /// 图片 [HttpGet] [Route("{width}/{name}")] public IActionResult GetImage(int width, string name) { var errorImage = "/static/common/images/404.png";//没有找到图片 if(name.IsEmptyString()) { name = errorImage; } else { name = HttpUtility.UrlDecode(name, Encoding.GetEncoding("utf-8")); name = name.Replace("/", "\"); if(name.StartsWith("\")) { name = name.Substring(1); } } var contentTypeStr = "image/jpeg"; var ext = Path.GetExtension(name); //未知的图片类型 if(!FileHelper.IsImageExt(ext)) { name = errorImage; } else { contentTypeStr = FileHelper.GetContentType(ext); } bool isThum = false;//是否是缩略图 var thumname = name;//缩略图路径 bool saveThum = false; //原图 if(width oWidth) { width = oWidth; } else { height = width * oHeight / oWidth; } var newImg = new Bitmap(imgBmp, width, height); newImg.SetResolution(72, 72); var ms = new MemoryStream(); newImg.Save(ms, ImageFormat.Bmp); if(saveThum) {            //这里是调用的类似OSS保存图片的方法 objectStorage.PutObject(thumname, ms); ms.Position = 0; } var bytes = ms.GetBuffer(); ms.Close(); return new FileContentResult(bytes, contentTypeStr); } }</p> <pre><code> 代码如上,表面上看起来看不出来问题,后来我认真检查了一下代码,发现newImg.Save(ms, ImageFormat.Bmp);这句代码有点问题,为什么是固定的bmp格式,于是我将这句代码改成如下代码: ;gutter:true;
switch(ext.ToLower())
{
case ".jpg":
case ".jpeg":
case ".jpe":
case ".jfif":
newImg.Save(ms, ImageFormat.Jpeg);
break;
case ".png":
newImg.Save(ms, ImageFormat.Png);
break;
case ".gif":
newImg.Save(ms, ImageFormat.Gif);
break;
case ".tif":
case ".tiff":
newImg.Save(ms, ImageFormat.Tiff);
break;
case ".bmp":
case ".wbmp":
newImg.Save(ms, ImageFormat.Bmp);
break;
default:
newImg.Save(ms, ImageFormat.Jpeg);
break;
}

问题解决,原来文件流里面也是要指定文件保存的格式的,不然就会出现想不到的问题。

Original: https://www.cnblogs.com/ithome8/p/16371806.html
Author: IT之家
Title: 关于.netcore即时生成缩略图踩的坑

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591822/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 模板语法之标签

    语法 {% &#x5F00;&#x59CB;&#x6807;&#x7B7E; %} …. {% &#x7ED3;&#x675F;…

    数据库 2023年6月14日
    0140
  • 第16章 变量、流程控制与游标

    第16章 变量、流程控制与游标 1. 变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。 在 MySQL 数据库中,变…

    数据库 2023年6月6日
    0101
  • 数据库治理的云原生之道 —— Database Mesh 2.0

    2018 年 3 月,一篇《Service Mesh 是大方向,那 Database Mesh 呢?》迅速火爆技术圈。在这篇文章中,Apache ShardingSphere 创始…

    数据库 2023年6月16日
    0107
  • JavaWeb核心篇(7)——VUE和Element

    VUE&Element 今日目标: 能够使用VUE中常用指令和插值表达式 能够使用VUE生命周期函数 mounted 能够进行简单的 Element 页面修改 能够完成查询…

    数据库 2023年6月14日
    099
  • 实验:非GTID 一主多从变级联架构

    个个原创文章 欢迎讨论https://www.cnblogs.com/konggg/欢迎转载收藏,转载请注明来源,谢谢支持! Original: https://www.cnblo…

    数据库 2023年6月16日
    0136
  • 日月既往,不可复追,暑期实习结束!

    在从上海回南京的高铁上码下了这篇文章,心中感慨万千, 两个月弹指一挥间,初来时还略有不适,突然要走了竟然还生出一些留念,所谓 “天可补,海可填,南山可移,日月既往,不可…

    数据库 2023年6月6日
    0169
  • MySQL知识点总结(完整版)

    登录和退出MySQL服务器 &#x767B;&#x5F55;MySQL $ mysql -u root -p12345612 &#x9000;&#x…

    数据库 2023年5月24日
    075
  • 1_Html

    一. 引言 1.1 HTML概念 网页, 是网站中的一个页面, 是构成网站的基本元素, 是承载各种网站应用的平台. 通俗的说, 网站就是由网页组成的, 通常我们看到的网页都是以ht…

    数据库 2023年6月11日
    083
  • python-tkinter 自定义tkinter风格的提示框

    博客园的密码终于找回了 前言 偶尔使用python要绘制个简单输入提示框或者复选框窗体,使用tkinter的话绘制窗体也是很麻烦的,想着能不能把它自定义一个简单可复用的提示框。然后…

    数据库 2023年6月11日
    084
  • atomic 原子自增工程案例

    案例 1 : 简单用法 atomic_int id; atomic_fetch_add(&id, 1) atomic_uint id; atomic_fetch_add(&…

    数据库 2023年6月9日
    0102
  • Gorm 的黑魔法

    开发过程中,看到同事的代码写了这么一段: db = db.Session(&gorm.Session{Context: db.Statement.Context}).Fir…

    数据库 2023年6月9日
    0119
  • 线程的同步

    线程同步机制同步块:Java中提供了同步机制,可以有效的防止资源冲突。同步机制使用 synchronized关键字 使用该关键字的代码块称为同步块。同步块 语法: synchron…

    数据库 2023年6月16日
    0138
  • MySQL 索引排序

    表结构和数据 CREATE TABLE t1 ( id int(11) NOT NULL AUTO_INCREMENT, a int(11) DEFAULT NULL, b int…

    数据库 2023年5月24日
    086
  • Mybatis-Plus 实现乐观锁

    是指在读取一行数据时,记下它的版本号、最近修改的时间戳或校验和。然后,你可以在修改记录之前检查版本有没有发生变化。 适用场景 适用于读多写少的场景,乐观锁相信事务之间的数据竞争概率…

    数据库 2023年6月6日
    099
  • 如何成为一名开发人员——第 3 部分:人际交往能力

    在前两节中,我介绍了技术和非技术技能。但是,编程生涯不能凭空出现!需要彼此才能茁壮成长。 你听说过”铁磨铁”这句话。这在软件开发行业当然是正确的。我的大部分…

    数据库 2023年6月14日
    089
  • Nginx 配置参数优化

    nginx 配置参数优化 nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求。以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业…

    数据库 2023年6月6日
    0109
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球