C#实现图片/GIF压缩、创建缩略图、添加文本水印、图像水印、解析/创建二维码、条形码功能汇总

2021-11-20

图片基本操作

复制、重命名、剪切到、删除、查看信息

图片也是文件,所以下面这些操作对普通文件也一样适用

文件与字节数组互转

Base64和图片互转

下载网络图片到本地

图像缩略图

通过更改图像的尺寸,减少图像的大小。如我们往服务器上传一张1000 x 1000,大小为2M的图片A,我们可以将这张图片改为200 x 200,大小为300Kb的图片B并将这两张图片进行存储。当我们在网站页面上展示时,仅展示B,当用户想查看原图时,再加载原图A。

普通图片缩略图,不支持压缩GIF

工具:获取图片编码类型信息

GIF缩略图,仅处理GIF,TIFF未测试

图像大小压缩

普通图片压缩,不支持压缩GIF

注意太小的图片(小于3M)可能会增大。size参数只是一个参考,不一定能压到指定值,因为当压缩到flag的值小于20,但此时图片的大小仍无法满足Size的预期,程序就会停止压缩,保留上一次压缩的结果。

【Gifsicle】压缩GIF图像大小,仅处理GIF

Gifsicle: Command-Line Animated GIFs (lcdf.org)

查看GIF的结构

image-20211117171729272

gifsicle压缩GIF命令

观察以上命令:

-O2:压缩类型 O1:最快,O2:较好,O3:最好也是最慢的

--delete:抽帧,删除掉某些帧 --delete #3 删除第三帧,--delete #3-15 删除第3至15帧

-d 87:延迟0.87秒 通常是将删掉的帧的时间加起来

--scale:GIF图像压缩,0-1之间,能达到压缩效果最核心的部分

--lossy:画质压缩,越大画质越差,能达到压缩效果最核心的部分

--colors:指定色彩 2-256 最好是2的平方

-o:结果输出位置

借助 gifsicle 工具,执行gifsicle命令行来进行压缩

工具:C#执行CMD命令

图像添加水印

普通图片添加文字水印

参考:C# 图片添加水印 - simadi - 博客园 (cnblogs.com)

C#图片添加文字水印 - 渴望运动的胖子 - 博客园 (cnblogs.com) 文字旋转

water_markText

普通图片添加图像水印

C# 给图片添加透明的文字、图片水印 - slyly - 博客园 (cnblogs.com)

water_markImg

工具:改变图片的透明度

【ffmpeg】GIF添加文字水印

借助ffmpeg来给GIF添加文字水印(不支持倾斜)和图片水印(支持90°倾斜)

ffmpeg添加文字水印命令

-i:原图

-y:不询问

-vf:水印的参数

fontfile='simsun.ttc':字体文件。原路径:C:\Windows\Fonts\xxx.ttf 要改成 C\:/Windows/Fonts/xxx.ttf,即 fontfile='C\:/Windows/Fonts/xxx.ttf'

text='蕾蕾':水印内容

x=W-100:开始位置X,W为原图宽度

y=H-10:开始位置Y,H为原图高度

fontcolor:颜色

star_markGifCenter_compress

【ffmpeg】GIF添加图像水印

ffmpeg添加图片水印的命令

-i:原图

-y:不询问

-vf:水印的参数

movie='disk.png':指定水印图片,绝对路径要写成:movie='C\:/xxx/xxx/disk.png'

scale=-1:-1:水印宽高,-1表示原尺寸。scale=200:-1,宽度变成200,高度根据宽度自适应

lut=a=val*0.6:图片水印透明度

overlay=W-w:H-h:图片水印的左上角的位置,W、H:原图宽度、高度,w、h:水印宽度、高度;W-w:H-h刚好将水印放到右下角

CompressGifVM622e2f19-9a4e-4591-8257-215c44a43b9a_star_markImgGif

普通图片全屏水印

调用DrawString,直接在原图上写文字即可,最重要的时根据文字算出每个水印的宽高

water_fullMarkChinese

【ffmpeg】GIF添加全屏水印

ffmpeg添加文字水印时,不允许倾斜,我们可以先在一张空白的PNG图片上绘制倾斜的水印文字,然后再利用ffmpeg的图片水印功能将PNG图片作为水印图片即可

star_fullMarkGifChinese_compress

工具:全屏绘制文字图片

【ZXing.Net】二维码、条形码

更多请参考:micjahn/ZXing.Net: .Net port of the original java-based barcode reader and generator library zxing (github.com)

C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一) - 天马3798 - 博客园 (cnblogs.com)

image-20211120181110966

生成条形码

条形码不支持中文字符,仅支持数字和英文

生成二维码

生成二维码中间带有图像

解析二维码、条形码的内容

其他

  1. 目录结构,要将Image、Tools下的资源复制到输出目录

image-20211117182350667

  1. 源码:GitHub - logerlink/ImageTools: 简单的图片/GIF操作工具。可用于图片/GIF压缩、创建缩略图、添加文本水印、图像水印、创建/解析二维码、条形码
  2. 做了一个简单的小工具