概述

一个桌面程序,能修改图片的尺寸和质量,并且通过加水印的方式修改图片的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相关推荐

  1. 贴吧图片是否需要修改md5值,批量修改图片md5值-批量修改图片md5工具

    答:不需要,只要说图片修改md5值去发就行的,无论是不是大佬,全都是low笔.[谁问谁low笔] 我是万能的小胡,专注研究防删图,带您轻松玩转贴吧

  2. Python图片添加水印修改MD5值

    Python图片添加水印修改MD5值 效果图 安装pillow(python图形界面库) 生成水印 查看MD5值 效果图 安装pillow(python图形界面库) pip install pillo ...

  3. 图片压缩,修改图片dpi值,更改图片大小

    主要修改图片dpi值,原理:电脑一般dpi为96,图片dpi超过这个值后,图片清晰度没多大变化,降低图片dpi值就能大幅度降低图片大小,如图片dpi为180,将其降到96后,图片宽高比例不变,图片大小 ...

  4. vue3 项目修改打包后的引用路径,调整图片压缩成base64的门槛

    vue3 项目修改打包后的引用路径,调整图片压缩成base64的门槛 前言 解决 完事 前言 最近的项目中需要在程序中显示一个H5页面,所以按照官方VUE CLI的教程创建了一个项目开始整.整到最后打 ...

  5. 实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)

    轻量级分布式文件系统FastDFS--实现用户头像上传/压缩屏幕适配 一.需求分析 1.1 业务场景: 用户上传的头像图片大小不一.手机和PC等设备显示尺寸也存在差异,因此需要能根据http请求指定的 ...

  6. 使用Java计算文件的MD5值(含修改MD5值的方法)

    什么是 MD5 ? MD5(Message Digest Algorithm,信息摘要算法),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保 ...

  7. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  8. Gulp 之图片压缩合并

    同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...

  9. html转markdown_markdown转html带目录和图片压缩

    浅谈java全栈技术 加油!一起成长! markdown是什么这里就不详细介绍了,不懂的先百度了解一下. markdown里面如果粘贴了图片的话,发送给其他人或者网络传输感觉不上很方便,而且其他人阅读 ...

  10. java jpeg压缩解码_图片压缩(iOS)

    场景很简单,上传图片前压缩图片,节省流量和发图时间.最近看了看 iOS 的静态图片压缩,这里记个笔记.本人之前没学过 iOS 和 Swift,本文是一篇入门文章,描述不到位之处请大家多多批评斧正. ̄ω ...

最新文章

  1. React 组件绑定点击事件,并且传参完整Demo
  2. 运行在浏览器中的深度学习框架,开源了
  3. 查找python项目依赖并生成requirements.txt
  4. oracle成本岗,ORACLE的成本管理.doc
  5. 返回图片_Vue 图片压缩并上传至服务器
  6. java解析日志数据_Java实时监控日志文件并输出的方法详解
  7. Hibernate配置属性详解
  8. Lambda表达式练习1【应用】
  9. Java提高篇 —— Java三大特性之继承
  10. html代码大全(很全的)_HTML教学(1):写一个属于自己的网址大全(新手版)
  11. 穿山甲插屏广告居中_穿山甲跻身广告联盟头部阵营 如何实现增量创新?
  12. QT界面大小自动变化
  13. HDU - 3506 Monkey Party
  14. 安卓按键命令库教程(紫猫版续)
  15. Office 2210 能打钩的复选框
  16. echart获取geoJson格式世界各国地图的资源,世界地图,世界各国分区显示,精确到乡镇一级资源
  17. 新固态硬盘安装操作系统
  18. 论文阅读—《Fuzzy Reinforcement Learning Algorithm for the Pursuit-Evasion Differential Games 》
  19. m基于BP神经网络的障碍物避障和路线规划matlab仿真
  20. 内涵社区APP,一款集内涵段子,百思不得其姐,煎蛋于一身的搞笑社区

热门文章

  1. nginx配置文件服务器
  2. Python 中的map和reduce学习笔记
  3. php的curl封装类
  4. Js判断当前浏览者的操作系统
  5. codeigniter CI 框架 在helper 中 使用 全局变量 方法
  6. 使用AjaxPro实现ajax效果
  7. 60、剑指offer--把二叉树打印成多行
  8. 2017.3.27-morning
  9. 怎样获取用户的真实需求
  10. MFC vs2012 Office2013 读写excel文件