F#之旅7 - 图片处理入门

首先,隆重介绍今天的主角:ImageFactory(http://imageprocessor.org/)。虽然我并没有在实际工作中用到这个库,但是它干净利索的使用方式打动了我,很久以前就存了下来。这个库的开发语言是C#,nuget有下载,提供了一系列可以链式调用的方法来处理图片。关键的一点,它是开源的,代码很清晰,有什么bug和不爽可以自己想怎么改就怎么改。

接下来,需要一提的是,我对图片处理一窍不通。所以,这篇文章是我入门图片处理的记录。当然,矩形圆形直线、RGB这类基础,就不特别提了。

一、图片格式
ImageFactory内置支持的图片格式,自然也是常见常用的图片格式。包括:
1、bmp:Bitmap,位图,采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩。
2、gif:Graphics Interchange Format,分为静态GIF和动画GIF,是一种压缩位图格式。
3、jpg(jpeg):Joint Photographic Experts GROUP,可以选择压缩级别。
4、png:Portable Network Graphic Format,其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。
5、tif(tiff):Tag Image File Format,是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。

二、图片处理
Alpha 透明度
Changes the opacity of the current image.
Alpha(int percentage) [0,100]

AutoRotate 自转
Performs auto-rotation to ensure that EXIF defined rotation is reflected in the final image.
AutoRotate()

BackgroundColor 背景色
Changes the background color of the current image.
BackgroundColor(Color color)

Brightness 亮度
Changes the brightness of the current image.
Brightness(int percentage) [-100,100]

Constrain 约束
Constrains the current image, resizing it to fit within the given dimensions whilst keeping its aspect ratio. Produces the same output as the Resize method using ResizeMode.Max
Constrain(Size size)

Contrast 对比度
Changes the contrast of the current image.
Contrast(int percentage) [-100,100]

Crop 裁剪
Crops the current image to the given location and size.
Crop(Rectangle rectangle)
Crop(CropLayer cropLayer)

DetectEdges 边缘检测
Detects the edges in the current image using various one and two dimensional algorithms. If the greyscale parameter is set to false the detected edges will maintain the pixel colors of the originl image.
DetectEdges(IEdgeFilter filter, bool greyscale = true)
IEdgeFilter = KayyaliEdgeFilter、KirschEdgeFilter、Laplacian3X3EdgeFilter、PrewittEdgeFilter...

EntropyCrop 熵裁剪(根据信息量的阈值来裁剪)
Crops an image to the area of greatest entropy. This method works best with images containing large areas of a single color or similar colors around the edges.
EntropyCrop(byte threshold = 128)

Filter 滤镜
Applies a filter to the current image. Use the MatrixFilters class to assign the correct filter
Filter(IMatrixFilter matrixFilter)
IMatrixFilter = BlackWhite、Gotham、Lomograph、Polaroid...

Flip 翻转
Flips the current image either horizontally or vertically.
Flip(bool flipVertically)

Format 格式
Sets the output format of the current image to the matching
Format(ISupportedImageFormat format)
ISupportedImageFormat = BitmapFormat、JpegFormat、GifFormat...

GaussianBlur 高斯模糊
Uses a Gaussian kernel to blur the current image.
GaussianBlur(int size)
GaussianBlur(GaussianLayer gaussianLayer)

GaussianSharpen 高斯锐化
Uses a Gaussian kernel to sharpen the current image.
GaussianSharpen(int size)
GaussianSharpen(GaussianLayer gaussianLayer)

Hue 色调
Alters the hue of the current image changing the overall color.
Hue(int degrees, bool rotate = false)

Mask 遮盖
Applies the given image mask to the current image. Any area containing transparency withing the mask will be removed from the original image. If the mask is larger than the image it will be resized to match the images dimensions.
Mask(Image imageMask, Point? point = null)

Overlay 覆盖
Adds a image overlay to the current image. If the overlay is larger than the image it will be resized to match the images dimensions.
Overlay(ImageLayer imageLayer)

Pixelate 像素化(马赛克)
Pixelates an image with the given size.
Pixelate(int pixelSize, Rectangle? rectangle = null)

Quality 图片质量
Alters the output quality of the current image. This method will only effect the output quality of jpeg images.
Quality(int percentage) [0,100]

ReplaceColor 替换颜色
Replaces a color within the current image.
ReplaceColor(Color target, Color replacement, int fuzziness = 0)

Resize 改变大小
Resizes the current image to the given dimensions. If EXIF metadata is to be preserved the information contained within will also be updated to match.
Resize(Size size)
Resize(ResizeLayer resizeLayer)

Resolution 分辨率
Changes the horizontal and vertical resolution of the image. If EXIF metadata is to be preserved the information contained within will also be updated to match.
Resolution(int w, int h)

Rotate 旋转
Rotates the current image by the given angle without clipping.
Rotate(int degrees)

RoundedCorners 圆整圆角
Adds rounded corners to the current image.
RoundedCorners(int radius)
RoundedCorners(RoundedCornerLayer roundedCornersLayer)

Saturation 饱和度
Changes the saturation of the current image.
Saturation(int percentage)

Tint 色度
Tints the current image with the given color
Tint(Color color)

Vignette 晕影
Adds a vignette image effect to the current image.
Vignette(Color color)

Watermark 水印
Adds a text based watermark to the current image.
Watermark (TextLayer textLayer)

三、尝试
最后,来试一下效果吧。

时间: 2024-10-14 05:11:25

F#之旅7 - 图片处理入门的相关文章

F#之旅8 - 图片处理应用之动画二维码

首先,先介绍下什么是动画二维码.前些天在网上闲逛,突然看到一个开源项目,发现一种二维码的新玩法.https://github.com/sylnsfar/qrcode/blob/master/README-cn.md.二维码各种美化早就有看过,原理也大概知道,一是利用二维码的容错率,二是利用识别工具的纠错能力.这次的二维码,让我有点excited,居然把动画和二维码结合起来了.当然,具体把这种二维码叫什么,我也定不了,叫动画二维码.动态二维码.gif二维码都可以吧.动画二维码和之前的美化过的二维码

F# 之旅(上)

写在前面的话 解答一下在上一篇文章<在Visual Studio中入门F#>中有人的提问, 1. 问:是准备写 F# 系列吗?    答:当然不是,本人也是刚刚学习 F#,只是翻译微软官方的文档,但是我会尽力翻译更多的文章. 2. 问:你们的项目使用F#写的吗?    答:本人大三学生,也不是什么大佬,兴趣而已. 在这篇文章中 怎样运行示例代码 函数和模块 数字.布尔值和字符串 元组 管线和组成 列表.数组和序列 学习 F# 最好的方式是读写 F# 代码.本文将介绍 F# 语言的一些主要功能,

F#之旅4 - 小实践之快排

参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-quicksort.html F#之旅4 - 小实践之快排 这次这篇呢,就不翻译了,因为原文确实是相当的简单.先贴一下能跑的代码: 这里贴的不是文本,如果你也想尝试一下,建议你抄一遍,或者理解之后自己写一遍.来看看都有那些要注意的点吧: 1.快排算法,这里用的递归的形式,把所有数分成三部分,[比第一个元素小的部分] [第一个元素] [比第一个元素

F#之旅0 - 开端

F#之旅0 - 开端 UWP的学习告一段落,CozyRSS的UWP版本并没有做.UWP跟wpf开发几乎一模一样,然后又引入了很多针对移动设备的东西,这部分有点像android.没啥太大的意思,不难,估计坑不少,但是暂时的没太大的欲望去玩. 学一门函数式编程语言,听起来就是一件不错的事情. 函数式编程,准确的来说应该是函数式编程这种编程范式,在很多中编程语言中都可以玩的.现在流行的js.python.lua.c++.java都有闭包了,至于惰性计算.常量,也好像不那么重要.但是既然特意说学一门函数

一条数据的HBase之旅,简明HBase入门教程-Write全流程

如果将上篇内容理解为一个冗长的"铺垫",那么,从本文开始,剧情才开始正式展开.本文基于提供的样例数据,介绍了写数据的接口,RowKey定义,数据在客户端的组装,数据路由,打包分发,以及RegionServer侧将数据写入到Region中的全部流程. NoSQL漫谈 本文整体思路 前文内容回顾 示例数据 HBase可选接口介绍 表服务接口介绍 介绍几种写数据的模式 如何构建Put对象(包含RowKey定义以及列定义) 数据路由 Client侧的分组打包 Client发RPC请求到Regi

F#之旅5 - 小实践之下载网页(爬虫基础库)

参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-download.html 参考的文章教了我们如果在F#里利用.Net的库来下载一个网页,这里,我来发散一下,把它弄成一个可以用来帮助写爬虫的基础库. 首先,下载的代码我做了几处修改: 1.去掉了回调,直接改成了保存文本到文件,注意如果是下载图片不能这样写. 2.用流来一步步调用.Net的库,并且加上了异常处理. 3.增加了一个async的异步方

F#之旅3 - F# PK C#:简单的求和

原文链接:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-sum-of-squares.html Comparing F# with C#: A simple sumF# PK C#:简单的求和 To see what some real F# code looks like, let's start with a simple problem: "sum the squares from 1 to N

F#之旅2 - 我有特别的学F#技巧

原文地址:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/learning-fsharp/ Learning F#Functional programming languages need a different approach学习F#函数式编程语言需要不同的学习方法 Functional languages are very different from standard imperative languages, an

【数据结构之旅】顺序栈入门操作

说明: 书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能 通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释 代码及注释如下: #include<stdio.h> #include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数 typedef struct{