C#使用Magick.NET进行图片格式转换,修改尺寸(.ico .jpg .png .gif .bmp),解决pngjpg透明变黑底问题

看了许多其他博客格式转换的代码,试过了才发现很多转成ico的图片虽然可以正常查看,但是压根无法使用,最简单的连用来作为Wiform软件的图标都不行,最后呢参考py代码发现pyPythonMagick这个包挺好用的,仔细查看后发现C#也有类似的包,Magick.NET,废话不多少,直接进入正题吧!

1.安装NuGet

2.核心代码

试了几种格式,gif/jpg/png/ico都可以互转,bmp可以转成其他的,其他转bmp会报错,bmp不用也无所谓了,这年头基本没人用bmp,就跟微软的ie一样,人人喊打!

new Thread(() => {try {button1.Enabled = false;using (MagickImage image = new MagickImage(filePath)) {//格式string file_format = file_format_comboBox.SelectedItem.ToString().Trim();if (file_format.EndsWith("ico")) {file_format = ".ico";} else if (file_format.EndsWith("png")) {file_format = ".png";} else if (file_format.EndsWith("jpg")) {file_format = ".jpg";//质量百分比string quality = quality_trackBar.Value.ToString();//原图质量的百分比进行压缩image.Quality = Convert.ToInt32(quality);//将透明色更改成白色(这里不指定默认是黑色)image.Opaque(Color.Transparent, Color.White);}string width_text = width_textBox.Text.Trim();string height_text = height_textBox.Text.Trim();if (!defaultSize_checkBox.Checked) {if (!Regex.IsMatch(width_text, "^[1-9]\\d*$")) {MessageBox.Show("宽度错误");return;}if (!Regex.IsMatch(height_text, "^[1-9]\\d*$")) {MessageBox.Show("高度错误");return;}int new_width = Convert.ToInt32(width_text);int new_height = Convert.ToInt32(height_text);if (file_format.EndsWith("ico")) {if (new_width > 256 || new_height > 256) {MessageBox.Show("ico格式宽高不可超过256", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}}if (new_width <= img_width && new_height <= img_height) {//缩小:设定的宽高都比原图小int max = new_width > new_height ? new_width : new_height;image.Resize(max, max);} else {//等比例放大decimal d1 = Convert.ToDecimal(new_width) / Convert.ToDecimal(img_width);decimal d2 = Convert.ToDecimal(new_height) / Convert.ToDecimal(img_height);decimal maxMult = d1 > d2 ? d1 : d2;int max_X = Convert.ToInt32(maxMult * Convert.ToDecimal(img_width));int max_Y = Convert.ToInt32(maxMult * Convert.ToDecimal(img_height));image.Resize(max_X, max_Y);}double[] ProjectTransform ={0,0,0,0,  //左上角      image.Width,0,new_width,0,    //右上角0,image.Height,0,new_height,   //左下角image.Width,image.Height,new_width,new_height//右下角};//按照ProjectTransform的坐标点进行拉伸或缩放image.Distort(DistortMethod.Perspective, ProjectTransform);//因为按大小进行拉伸或缩放后,其他区域会糊掉,所以要裁剪出我们的所需的大小,既缩放拉伸或的清楚区域image.Crop(new_width, new_height);} else {image.Resize(Convert.ToInt32(width_text), Convert.ToInt32(height_text));}string newFileName = @"C:\Users\Administrator\Desktop\new_" + Path.GetFileNameWithoutExtension(filePath) + file_format;try {image.Write(newFileName);} catch (Exception ee) {if (ee.Message.Contains("width or height exceeds limit")) {MessageBox.Show("宽度或高度超过限制", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);} else {MessageBox.Show(ee.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}newFile_label.Text = newFileName;}} catch (Exception ee) {Console.WriteLine(ee);} finally {button1.Enabled = true;}
}).Start();

关于pngjpg透明背景变成黑色的问题解决代码:

//将透明色替换成白色(这里不指定默认是黑色)
image.Opaque(Color.Transparent, Color.White);

还有个地方需要注意一下,就是修改尺寸的时候,如果宽或者高大于原来的图片尺寸,那么需要先按比例将此MagickImage放大(Resize),然后进行拉伸(Distort),最后在进行裁剪.

C# 使用Magick.NET进行图片格式转换相关推荐

  1. ASP.NET2.0图片格式转换【月儿原创】

    ASP.NET2.0图片格式转换 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.20 说明:本文实现了 图片格式随意转换( ...

  2. Winform中实现图片格式转换(附代码下载)

    场景 选择一张照片并选择保存位置和要转换的图片格式实现图片格式转换. 项目运行效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸 ...

  3. python gif_python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? 这个哥们通过爬气象网站的气象雷达图,生成一个gif的动态图.非常有趣且很实用,那咱也实现下. 我们先实现一个从GIF提取帧的代码 ...

  4. 图片格式转换 - .webp 转格式为 .png / .jpg

    图片格式转换 - .webp 转格式为 .png / .jpg 很多时候,网页上素材图片格式出现了.webp格式的,PS无法正常打开查看或使用,所以需要转换一下其他格式(如.png / .jpg 等等 ...

  5. php怎么将网页变成图片格式,php如何实现图片格式转换

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  6. Python图片格式转换,图片压缩

    PyQt 图片格式转换,图片压缩 界面展示 # -*- coding: utf-8 -*- import osfrom PIL import Image from PIL.ImageFile impo ...

  7. python图片保存jpg、show变成bmp_Python 图片格式转换

    图片格式转换可以利用各种软件 今天介绍一下如何使用 Python 实现各种图片格式的转换 1. SVG 转其他格式 读取 SVG 格式文件,需要安装 svglib 库 pip install svgl ...

  8. bmp,jpg,png,tif,wmf,emf与eps图片格式转换

    wmf/emf是两种Microsoft Windows的图形文件格式.它是一个矢量图格式,但是也允许包含位图.本质上,一个WMF文件保存一系列可以用来重建图片的Windows GDI命令.在某种程度上 ...

  9. 如何将JPG转换为PNG?两种图片格式转换的方法交给你

    在平时的工作生活当中,大家都会使用到各种各样的图片,其中jpg格式与png格式都是大家平时比较常用的图片格式,但是在使用图片时,可能会遇到只能上传其中某种格式的情况,那么这时候就需要将图片转换成相应的 ...

  10. 设置图片格式为php,php实现图片格式转换

    php实现图片格式转换的方法:首先新建一个php文件,并在测试目录放两张图片:然后通过pathinfo函数来判断图片的格式:最后通过函数imagejpeg将图片源转换成jpg格式图片并保存即可. 推荐 ...

最新文章

  1. 在VS下用C语言连接SQLServer2008
  2. 学生计算机屏幕坏了怎么办,如果计算机显示器的屏幕坏了怎么办?
  3. python基础练习(四)
  4. 零编程基础学python-如果是一个纯0编程基础的小白,如何学Python
  5. apache2.2 虚拟主机配置
  6. 格力机器人图解_格力工业机器人:是时候展示真正的实力了
  7. 得胜php100怎么样,优缺点评测得胜Q麦评价如何?怎么样呢?老司机透漏
  8. linux 下source命令
  9. 亚马逊 ai 解雇_解雇社区成员
  10. gitHub上传项目
  11. html猜随机数游戏,用js制作简易计算器及猜随机数字游戏
  12. 指针用作函数参数、指针型函数和函数指针
  13. 高效的设计可视化UI
  14. 门禁系统使用计算机的技术,门禁系统的指纹识别功能所运用的计算机技术是( )...
  15. 流氓软件mcafee之Mac端卸载
  16. CSS-table样式+
  17. 何通过ArcCatalog本地发布地图服务
  18. mobilenet cpu 加速_UP手游加速器苹果版下载安装-UP手游加速器iOS苹果版下载
  19. 经典日常英语口语回汇总大全
  20. Flutter 学习之路 -- 异步任务

热门文章

  1. kali安装最新版nessus
  2. Git 基础命令与事件详解(基础版)
  3. 5G无线关键技术 — 高频段信号传输技术
  4. 上海财经应用统计考python_20上财应用统计415分经验帖(初试第一)
  5. BFS算法和DFS算法(含图解:简单易懂)
  6. 阿里巴巴2019实习生招聘正式启动
  7. WP 手机Lumia 820 锁屏密码的POJI研究
  8. 苹果台式电脑怎么使用计算机,苹果笔记本键盘怎么用_苹果笔记本电脑键盘的使用方法-win7之家...
  9. png图片怎么转换成jpg?
  10. 关于Oracle的PARALLEL_MAX_SEVERS参数