图片压缩兼修改md5
概述
详细
代码下载:http://www.demodashi.com/demo/13498.html
一、程序截图
二、实现过程
实现思路:
1、编写界面
2、编写具体的按钮事件
3、重点是图片处理方法,然后将这些方法连接到按钮事件上面
4、测试运行。
具体代码如下:
1、入口是两个开始按钮的监听事件方法
//选择图片所在目录 private void button1_Click(object sender, EventArgs e) {FolderBrowserDialog dialog = new FolderBrowserDialog();dialog.Description = "请选择图片所在文件夹";if (dialog.ShowDialog() == DialogResult.OK){if (string.IsNullOrEmpty(dialog.SelectedPath)){label3.Text = "文件夹路径不能为空";return;}label1.Text = dialog.SelectedPath;source = dialog.SelectedPath;} } //选择图片所在目录 private void button2_Click(object sender, EventArgs e) {FolderBrowserDialog dialog = new FolderBrowserDialog();dialog.Description = "请选择输出文件夹";if (dialog.ShowDialog() == DialogResult.OK){if (string.IsNullOrEmpty(dialog.SelectedPath)){label3.Text = "文件夹路径不能为空";return;}label2.Text = dialog.SelectedPath;output = dialog.SelectedPath;} }//单层目录开始按钮监听 //按方法用于选择单个目录下的所有图片文件,并调用ApplyWaterMark方法进行图像处理 private void btnOk_Click(object sender, EventArgs e) {label3.ForeColor = Color.Black;if (string.IsNullOrEmpty(source)){label3.ForeColor = Color.Red;label3.Text = "请选择原文件夹";return;}if (string.IsNullOrEmpty(output)){label3.ForeColor = Color.Red;label3.Text = "请选择输出文件夹";return;}var files = Directory.GetFiles(source);foreach (var file in files){ApplyWaterMark(file, output);label3.Text = "正在修改" + file;}label3.ForeColor = Color.Red;label3.Text = "完成";source = string.Empty;output = string.Empty; }//双层目录开始按钮监听 //该方法用于父目录下还有一层子目录,子目录下才是图片文件的情况。可以批量修改多个文件夹的图片 private void btnOk2_Click(object sender, EventArgs e) {label3.ForeColor = Color.Black;if (string.IsNullOrEmpty(source)){label3.ForeColor = Color.Red;label3.Text = "请选择原文件夹";return;}if (string.IsNullOrEmpty(output)){label3.ForeColor = Color.Red;label3.Text = "请选择输出文件夹";return;}var dirs = Directory.GetDirectories(source); //先打开父目录foreach (var dir in dirs) //遍历子目录{foreach (var file in Directory.GetFiles(dir)){var dirInfo = new DirectoryInfo(dir);var dirName = dirInfo.Name;var outputDirName = Path.Combine(output, dirName);ApplyWaterMark(file, outputDirName);label3.Text = "正在修改" + file;}}label3.ForeColor = Color.Red;label3.Text = "完成";source = string.Empty;output = string.Empty; }
2、图像处理的核心代码
private void ApplyWaterMark(string file, string dir) {try{var info = new FileInfo(file);var name = info.Name;Image Im = Image.FromFile(file);var rate = (int)compressRate.Value == 0 ? 1 : (int)compressRate.Value;//读取图片压缩控件设置的倍数,最大值10var newImage = new Bitmap(Im,Im.Width/rate,Im.Height/rate);//源图片长宽除以该倍数,缩放图片Graphics g = Graphics.FromImage(newImage);// 创建 solid brush 往图片写水印Brush myBrush = new SolidBrush(Color.FromArgb(1, Color.LightSteelBlue));var f = new Font(FontFamily.GenericSerif, 1);var x = (int)(coX.Value); //读取水印坐标设置的X轴值var y = (int)(coY.Value); //读取水印坐标设置的Y轴值g.DrawString(".", f, myBrush, new Point(x, y));if (!Directory.Exists(dir)) //创建图片的输出目录{Directory.CreateDirectory(dir);}//初始化jpg图片解码器ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);Encoder myEncoder = Encoder.Quality;EncoderParameters myEncoderParameters = new EncoderParameters(1);var qualityNum = quality.Value; //读取图片质量控件设置的值,最大值为100EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)qualityNum);myEncoderParameters.Param[0] = myEncoderParameter;newImage.Save(Path.Combine(dir, name), jpgEncoder, myEncoderParameters);Im.Dispose();newImage.Dispose();g.Dispose();myBrush.Dispose();}catch (Exception ex){File.AppendAllText("error.txt", dir + "," + ex.Message);} }private ImageCodecInfo GetEncoder(ImageFormat format) {ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();foreach (ImageCodecInfo codec in codecs){if (codec.FormatID == format.Guid){return codec;} }return null; }
三、项目结构图
四、其他补充
说明:关于压缩图片,有时候缩放尺寸更好,有时候降低图片质量更好,有时候两个选项配合起来用,具体自己调节!
下面举个自己压缩图片的例子:
原图片
压缩后
压缩了近10倍的大小,但是图片的各项参数都没改变,压缩后的图片和原图片一样清晰。
压缩的时候只是将图片质量(quality)控件的值设置为50,就达到了这样的效果。当然,不是每张图片都是这样修改,有些图片可能修改尺寸,而不修改图片质量更好。
代码下载:http://www.demodashi.com/demo/13498.html
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
转载于:https://www.cnblogs.com/demodashi/p/9452992.html
图片压缩兼修改md5相关推荐
- 贴吧图片是否需要修改md5值,批量修改图片md5值-批量修改图片md5工具
答:不需要,只要说图片修改md5值去发就行的,无论是不是大佬,全都是low笔.[谁问谁low笔] 我是万能的小胡,专注研究防删图,带您轻松玩转贴吧
- Python图片添加水印修改MD5值
Python图片添加水印修改MD5值 效果图 安装pillow(python图形界面库) 生成水印 查看MD5值 效果图 安装pillow(python图形界面库) pip install pillo ...
- 图片压缩,修改图片dpi值,更改图片大小
主要修改图片dpi值,原理:电脑一般dpi为96,图片dpi超过这个值后,图片清晰度没多大变化,降低图片dpi值就能大幅度降低图片大小,如图片dpi为180,将其降到96后,图片宽高比例不变,图片大小 ...
- vue3 项目修改打包后的引用路径,调整图片压缩成base64的门槛
vue3 项目修改打包后的引用路径,调整图片压缩成base64的门槛 前言 解决 完事 前言 最近的项目中需要在程序中显示一个H5页面,所以按照官方VUE CLI的教程创建了一个项目开始整.整到最后打 ...
- 实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)
轻量级分布式文件系统FastDFS--实现用户头像上传/压缩屏幕适配 一.需求分析 1.1 业务场景: 用户上传的头像图片大小不一.手机和PC等设备显示尺寸也存在差异,因此需要能根据http请求指定的 ...
- 使用Java计算文件的MD5值(含修改MD5值的方法)
什么是 MD5 ? MD5(Message Digest Algorithm,信息摘要算法),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- Gulp 之图片压缩合并
同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...
- html转markdown_markdown转html带目录和图片压缩
浅谈java全栈技术 加油!一起成长! markdown是什么这里就不详细介绍了,不懂的先百度了解一下. markdown里面如果粘贴了图片的话,发送给其他人或者网络传输感觉不上很方便,而且其他人阅读 ...
- java jpeg压缩解码_图片压缩(iOS)
场景很简单,上传图片前压缩图片,节省流量和发图时间.最近看了看 iOS 的静态图片压缩,这里记个笔记.本人之前没学过 iOS 和 Swift,本文是一篇入门文章,描述不到位之处请大家多多批评斧正. ̄ω ...
最新文章
- React 组件绑定点击事件,并且传参完整Demo
- 运行在浏览器中的深度学习框架,开源了
- 查找python项目依赖并生成requirements.txt
- oracle成本岗,ORACLE的成本管理.doc
- 返回图片_Vue 图片压缩并上传至服务器
- java解析日志数据_Java实时监控日志文件并输出的方法详解
- Hibernate配置属性详解
- Lambda表达式练习1【应用】
- Java提高篇 —— Java三大特性之继承
- html代码大全(很全的)_HTML教学(1):写一个属于自己的网址大全(新手版)
- 穿山甲插屏广告居中_穿山甲跻身广告联盟头部阵营 如何实现增量创新?
- QT界面大小自动变化
- HDU - 3506 Monkey Party
- 安卓按键命令库教程(紫猫版续)
- Office 2210 能打钩的复选框
- echart获取geoJson格式世界各国地图的资源,世界地图,世界各国分区显示,精确到乡镇一级资源
- 新固态硬盘安装操作系统
- 论文阅读—《Fuzzy Reinforcement Learning Algorithm for the Pursuit-Evasion Differential Games 》
- m基于BP神经网络的障碍物避障和路线规划matlab仿真
- 内涵社区APP,一款集内涵段子,百思不得其姐,煎蛋于一身的搞笑社区