lua-resty-imagick

使用 FFI 为 LuaJIT 提供 ImageMagick 的 Lua 绑定

$ opm get tom2nonames/lua-resty-imagick

lua-resty-imagick

使用 FFI 为 LuaJIT 提供 ImageMagick 的 MagicWand 的 Lua 绑定。

重新实现 magick

状态

此库尚处于早期开发阶段。

安装

您将需要 LuaJIT(任何版本)和 MagickWand。

要使用 ImageMagick,您可以运行以下命令

在 Ubuntu 上

    $ sudo apt-get install libmagickwand-dev

在 Centos 上

    $ sudo yum install ImageMagick ImageMagick-devel

在 MacOS 上

    $ brew install imagemagick

建议使用 opm 安装 lua-resty-imagick

    $ opm install lua-resty-imagick

基本用法

如果您只需要调整大小/裁剪图像,请使用 thumb 函数。它为常见操作提供了简写语法。

    local magick = require("resty.imagick")
    magick.thumb("input.png", "100x100", "output.png")

thumb 的第二个参数是大小字符串,它可以有以下几种值

    "500x300"       -- Resize image such that the aspect ratio is kept,
                    --  the width does not exceed 500 and the height does
                    --  not exceed 300
    "500x300!"      -- Resize image to 500 by 300, ignoring aspect ratio
    "500x"          -- Resize width to 500 keep aspect ratio
    "x300"          -- Resize height to 300 keep aspect ratio
    "50%x20%"       -- Resize width to 50% and height to 20% of original
    "500x300#"      -- Resize image to 500 by 300, but crop either top
                    --  or bottom to keep aspect ratio
    "500x300+10+20" -- Crop image to 500 by 300 at position 10,20

如果您需要更高级的图像操作,您需要使用 Image 对象。继续阅读。

函数

所有函数都包含在 require("resty.imagick") 返回的表中。

thumb(input_fname, size_str, out_fname=nil)

加载并调整图像大小。如果提供 out_fname,则将输出写入 out_fname,否则返回图像 blob。(input_fname 可以选择是 Image 的实例)

load_image(fname)

返回一个新的 Image 实例,从文件名加载。如果无法加载图像,则返回 nil 和错误消息。

load_image_from_blob(blob)

从包含二进制图像数据的 Lua 字符串加载图像。

Image 对象

调用 load_imageload_image_from_blob 将返回一个 Image 对象。

    local magick = require "resty.imagick"
    
    local img = assert(magick.load_image("hello.png"))
    
    print("width:", img:get_width(), "height:", img:get_height());
    
    img:resize(200, 200)
    img:write("resized.png")

图像会由 LuaJIT 的垃圾收集器自动从内存中释放,但图像在加载时会占用大量内存,因此建议尽快在图像对象上调用 destroy

直接加载 ImageMagick

    magick = requrie "resty.imagick.wand"
    local img = magick.load_image("some_image.png")

方法

方法在适当的情况下会改变当前图像。使用 clone 获取独立的副本。

img:resize(w,h, f="Lanczos2", blur=1.0)

调整图像大小,f 是调整大小函数,请参见 过滤器类型

img:adaptive_resize(w,h)

使用 自适应调整大小 调整图像大小

img:crop(w,h, x=0, y=0)

将图像裁剪为 w,h,其中左上角为 x, y

img:blur(sigma, radius=0)

使用指定的参数模糊图像。请参见 模糊参数

img:rotate(degrees, r=0, g=0, b)

将图像旋转指定的度数。图像尺寸将扩大以防止裁剪。角上的三角形将填充由 r, g, b 指定的颜色。颜色分量指定为从 0 到 1 的浮点数。

img:sharpen(sigma, radius=0)

使用指定的参数锐化图像。请参见 锐化图像

img:resize_and_crop(w,h)

将图像调整为 w,h。如果需要,图像将被裁剪以保持其纵横比。

img:get_blob()

返回包含图像二进制数据的 Lua 字符串。blob 的格式与图像的当前格式相同(例如 PNG、Gif 等)。使用 image:set_format 更改格式。

img:write(fname)

将图像写入磁盘

img:get_width()

获取图像的宽度

img:get_height()

获取图像的高度

img:get_format()

获取图像的当前格式,作为文件扩展名,如 "png""bmp"。使用 image:set_format 更改格式。

img:set_format(format)

设置图像的格式,采用文件扩展名,如 "png""bmp"

img:get_quality()

获取图像压缩质量。

img:set_quality(quality)

设置图像压缩质量。

img:get_gravity()

获取图像重力类型。

img:set_gravity(gravity)

设置图像的重力类型

gravity 可以是 data.lua 中列出的值之一

img:get_option(magick, key)

返回与图像关联的所有与指定模式匹配的选项名称(例如 img:get_option("webp", "lossless")

img:set_option(magick, key, value)

将一个或多个选项与 img 关联(例如 img:set_option("webp", "lossless", "0")

img:scale(w, h)

将图像的大小缩放到给定的尺寸。

img:coalesce()

通过将每个帧合成到前一帧上,合并当前图像。这将未优化动画图像转换为适合其他方法的图像。

img:composite(source, x, y, compose)

将另一张图像合成到另一张图像上,偏移量为 x, y

compose 可以是 data.lua 中列出的值之一

img:strip()

从图像中去除所有配置文件和注释,对于去除 exif 和其他数据很有用

r,g,b,a = img:get_pixel(x, y)

获取图像中像素的 r、g、b、a 颜色分量,以 01 之间的双精度数表示

img:clone()

返回图像的副本。

img:modulate(brightness=100, saturation=100, hue=100)

调整图像的亮度、饱和度和色调。请参见 调整亮度、饱和度和色调

img:thumb(size_str)

将图像更改为缩略图。使用与本自述文件顶部描述相同的尺寸字符串格式。

img:destroy()

立即释放与图像相关的内存,在调用此方法后,图像将失效。通常不需要调用此方法,因为图像由垃圾收集器跟踪。

img:animate(server_name)

为图像或图像序列制作动画。

img:auto_gamma()

自动增强伽马。

img:auto_level()

自动增强级别。

img:auto_orient()

根据方向自动旋转图像。

img:black_threshold(threshold)

类似于 MagickThresholdImage(),但强制所有低于阈值的像素变为黑色,而将所有高于阈值的像素保持不变。

img:blue_shift(<double> factor)

使图像颜色静音以模拟月光下的夜间场景。

img:brightness_contrast(<int> brightness, <int> contrast)

改变图像的亮度和/或对比度。它将亮度和对比度参数转换为斜率和截距,并调用一个多项式函数应用于图像。参数介于 -100:100 之间

img:border(border_color, width, height, compose)

用由 bordercolor 像素魔杖定义的颜色边框包围图像。

img:charcoal(sigma, radius)

模拟炭笔画。

img:chop(width, height, x, y)

移除图像中的一个区域,并将图像压缩以占据已移除的区域。

img:clamp()

限制颜色范围在 0 到量子深度之间。

img:clip()

沿 8BIM 配置文件中的第一个路径剪切,如果有的话。

img:clip_path(path, inside)

沿 8BIM 配置文件中的命名路径剪切,如果有的话。后面的操作在路径内生效。如果在前面加上 #,id 可以是数字,用于处理编号路径,例如 "#1" 用于使用第一个路径。

img:clut(clut, method)

从颜色查找表中替换图像中的颜色。

img:color_decision_list()

接受一个轻量级颜色校正集合 (CCC) 文件,该文件仅包含一个或多个颜色校正,并将颜色校正应用于图像。以下是一个示例 CCC 文件

    <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2">
    <ColorCorrection id="cc03345">
          <SOPNode>
               <Slope> 0.9 1.2 0.5 </Slope>
               <Offset> 0.4 -0.5 0.6 </Offset>
               <Power> 1.0 0.8 1.5 </Power>
          </SOPNode>
          <SATNode>
               <Saturation> 0.85 </Saturation>
          </SATNode>
    </ColorCorrection>
    </ColorCorrectionCollection>

其中包括每个 RGB 通道的偏移量、斜率和幂,以及饱和度。

img:colorize(colorize, blend)

将填充颜色与图像中的每个像素混合。

img:color_matrix(color_matrix)

将颜色变换应用于图像。该方法允许饱和度变化、色调旋转、亮度到 alpha,以及其他各种效果。虽然可以使用可变大小的变换矩阵,但通常对 RGBA 图像使用 5x5 矩阵,对 CMYKA 使用 6x6 矩阵(或带有偏移量的 RGBA)。矩阵类似于 Adobe Flash 中使用的矩阵,只是偏移量在第 6 列而不是第 5 列(以支持 CMYKA 图像),并且偏移量已归一化(将 Flash 偏移量除以 255)。

img:combine(color_space)

将一个或多个图像组合成一个图像。序列中每个图像的像素的灰度值按顺序分配到组合图像的指定通道。典型的顺序是图像 1 => 红色,2 => 绿色,3 => 蓝色,等等。

img:comment(comment)

向图像添加注释。

img:compare_layers(method)

将序列中的每个图像与下一个图像进行比较,并返回它发现的任何像素差异的最大边界区域。

img:composite_layers(source, compose, x, y)

按顺序将源魔杖中的图像合成到目标魔杖中的图像上,从两个列表中的当前图像开始。

来自两个图像列表的每个图层都合成在一起,直到其中一个图像列表的末尾。每个合成的偏移量也调整为匹配每个图层的虚拟画布偏移量。因此,给定的偏移量相对于虚拟画布,而不是实际图像。

合成使用给定的 x 和 y 偏移量,作为源图像虚拟画布的“起点”位置(不是实际图像),允许您将“图层图像”列表合成到目标图像上。这使得它非常适合将“清除帧动画”或“合并动画”直接合成到静态图像或其他“合并动画”目标图像列表中。GIF 处理方式不会被考虑。

特殊情况:- 如果其中一个图像序列是最后一个图像(只有一个图像剩下),则该图像会重复地与另一个图像列表中的所有图像合成。对于这种情况,源列表或目标列表可以是单个图像。

在只有一个目标图像(或给定最后一个图像)的情况下,将克隆该图像以匹配源图像列表中剩余的图像数量。

这等效于“-layer Composite” Shell API 运算符。

img:compare(reference, metric, distortion)

将图像与重建的图像进行比较,并返回指定的差异图像。

img:composite_gravity(source, compose, gravity)

使用指定的重力将一个图像合成到另一个图像上。

img:contrast(sharpen)

增强图像中较亮和较暗元素之间的强度差异。将 sharpen 设置为非 0 值以增加图像对比度,否则对比度会降低。

img:contrast_stretch(black_point, white_point)

通过调整像素颜色以跨越所有可用颜色的范围,增强彩色图像的对比度。您还可以使用 0 的伽马值来减少特定通道的影响。

img:convolve(kernel)

将自定义卷积核应用于图像。

img:cycle_colormap(displace)

将图像的颜色表按给定位置数进行移位。如果您多次循环颜色表,可以产生迷幻效果。

img:constitute(columns, rows, map, storage, pixels)

将您提供的像素数据添加到魔杖中,组成一个图像。像素数据必须按扫描线顺序从上到下排列。数据可以是 char、short int、int、float 或 double。Float 和 double 要求像素归一化到 [0..1],否则归一化到 [0..Max],其中 Max 是该类型可以容纳的最大值(例如,char 为 255)。

img:decipher(passphrase)

将密文像素转换为明文像素。

img:deconstruct()

将序列中的每个图像与下一个图像进行比较,并返回它发现的任何像素差异的最大边界区域。

img:deskew(threshold)

去除图像的倾斜。倾斜是扫描图像中出现的一种伪影,原因可能是相机未对准、扫描或表面有缺陷,或者只是因为扫描时纸张没有完全平放。

img:despeckle()

减少图像中的斑点噪声,同时保留原始图像的边缘。

img:display(server_name)

显示图像。

img:displays(server_name)

显示图像或图像序列。

img:distort(method, num_args, args, bestfit)

使用各种失真方法扭曲图像,通过将源图像的颜色查找映射到一个新的目标图像,通常目标图像与源图像大小相同,除非将 "bestfit" 设置为 true。

如果启用 "bestfit",并且失真允许,则调整目标图像以确保整个源 "image" 刚好适合最终的目标图像,该图像将相应地进行大小调整和偏移。在许多情况下,还会考虑源图像的虚拟偏移量进行映射。

img:draw(draw)

在当前图像上渲染绘图魔杖。

img:edge(radius)

使用给定半径的卷积滤波器增强图像中的边缘。使用半径为 0,Edge() 将为您选择合适的半径。

img:emboss(radius, sigma)

返回具有三维效果的灰度图像。我们将图像与给定半径和标准差 (sigma) 的高斯算子进行卷积。为了获得合理的结果,半径应大于 sigma。使用半径为 0,Emboss() 将为您选择合适的半径。

img:encipher(passphrase)

将明文像素转换为密文像素。

img:enhance()

应用数字滤波器,以提高噪声图像的质量。

img:equalize()

均衡图像直方图。

img:evaluate(operator, value)

将算术、关系或逻辑表达式应用于图像。使用这些运算符可以使图像变亮或变暗,增加或减少图像的对比度,或生成图像的 "负片"。

img:export_pixels(x, y, columns, rows, map, storage, pixels)

从图像中提取像素数据并将其返回给您。该方法在成功时返回 True,否则如果遇到错误则返回 False。数据以 char、short int、int、ssize_t、float 或 double 的顺序返回,顺序由 map 指定。

假设您要提取 640x480 图像的第一条扫描线作为红色-绿色-蓝色顺序的字符数据:img:export_pixels(0, 0, 640, 1, "RGB", "Char", pixels)

img:extent(w, h, x, y)

根据几何图形、重力以及魔杖背景颜色扩展图像。设置几何图形的 (x,y) 偏移量,以将原始魔杖相对于扩展魔杖移动。

img:flip()

通过围绕中心 x 轴反射像素来创建垂直镜像图像。

img:flood_fill_paint(fill, fuzz, border_color, x, y, invert)

更改与目标匹配且是直接相邻的任何像素的颜色值。如果指定了 FillToBorderMethod 方法,则更改任何与图像的 bordercolor 成员不匹配的相邻像素的颜色值。

img:flop()

通过围绕中心 y 轴反射像素来创建水平镜像图像。

img:forward_fourier_transform(magnitude)

实现图像的离散傅里叶变换 (DFT),无论是幅度/相位还是实部/虚部图像对。

img:inverse_fourier_transform(phase_wand, magnitude)

实现图像的逆离散傅里叶变换 (DFT),无论是幅度/相位还是实部/虚部图像对。

img:frame(matte_color, w, h, inner_level, outer_level, compose)

在图像周围添加一个模拟的三维边框。宽度和高度指定边框的垂直和水平边的边框宽度。内部和外部斜角指示边框的内部和外部阴影的宽度。

img:function(func, num_args, args)

将算术、关系或逻辑表达式应用于图像。使用这些运算符可以使图像变亮或变暗,增加或减少图像的对比度,或生成图像的 "负片"。

img:fx(expression)

针对图像中的每个像素计算表达式。

img:gamma(gamma)

对图像进行伽马校正。在不同的设备上查看同一图像时,图像的强度在屏幕上的表示方式会有感知上的差异。为红色、绿色和蓝色通道指定单独的伽马级别,或使用伽马参数调整所有三个通道。值通常在 0.8 到 2.3 之间。

您还可以使用伽马值为 0 来减少特定通道的影响。

img:gaussian_blur(radius, sigma)

模糊图像。我们将图像与给定半径和标准差 (sigma) 的高斯算子进行卷积。为了获得合理的结果,半径应大于 sigma。使用半径为 0,gaussian_blur() 将为您选择合适的半径。

img:get_image()

获取当前图像索引处的图像。

img:get_alpha_channel()

如果图像 alpha 通道未激活,则返回 False。也就是说,图像为 RGB 而不是 RGBA 或 CMYK 而不是 CMYKA。

img:get_mask()

获取当前图像索引处的图像剪裁蒙版。

img:get_background_color(background_color)

返回图像背景颜色。

img:get_blobs()

实现直接到内存的图像格式。它将图像序列作为 blob 及其长度返回。图像的格式决定返回的 blob 的格式(GIF、JPEG、PNG 等)。

img:get_blue_primary(x, y, z)

返回图像的色度蓝色主点。

img:get_red_primary(x, y, z)

返回色度红色主点。

img:get_border_color(border_color)

返回图像边框颜色。

img:get_kurtosis(kurtosis, skewness)

获取一个或多个图像通道的峰度和偏度。

img:get_mean(mean, standard_deviation)

获取一个或多个图像通道的平均值和标准差。

img:get_range(minima, maxima)

获取一个或多个图像通道的范围。

img:get_colormap_color(color)

返回指定颜色映射索引的颜色。

img:get_colors()

获取图像中唯一颜色的数量。

img:get_colorspace()

获取图像颜色空间。

img:get_compose()

返回与图像关联的合成运算符。

img:get_compression()

获取图像压缩。

img:get_delay()

获取图像延迟。

img:get_dispose()

获取图像处置方法。

img:get_endian()

获取图像字节序。

img:get_filename()

返回序列中特定图像的文件名。

img:get_fuzz()

获取图像模糊度。

img:get_gamma()

获取图像伽马。

img:get_histogram(num_colors)

将图像直方图作为 PixelWand 魔杖数组返回。

img:get_interpolate_method()

返回指定图像的插值方法。

img:get_iterations()

获取图像迭代次数。

img:get_matte_color(matte_color)

返回图像蒙版颜色。

img:get_page()

返回与图像关联的页面几何图形。

img:get_pixel_color(x,y,color)

返回指定像素的颜色。

img:get_region(w, h, x, y)

提取图像的区域,并将其作为新魔杖返回。

img:get_rendering_intent()

获取图像渲染意图。

img:get_resolution(x, y)

获取图像的 X 和 Y 分辨率。

img:get_scene()

获取图像场景。

img:get_signature()

为图像像素流生成 SHA-256 消息摘要。

img:get_ticks_per_second()

获取图像每秒滴答数。

img:get_type()

获取潜在的图像类型

Bilevel Grayscale GrayscaleMatte Palette PaletteMatte TrueColor TrueColorMatte ColorSeparation ColorSeparationMatte

img:get_units()

获取图像分辨率单位。

img:get_virtual_pixel_method()

返回指定图像的虚拟像素方法。

img:get_white_point(x, y, z)

返回色度白点。

img:get_number()

返回与魔杖关联的图像数量。

img:hald_clut(hald_wand)

使用 Hald 颜色查找表替换图像中的颜色。Hald 颜色查找表是将 3 维颜色立方体映射到 2 维的表。使用 HALD 编码器创建它。您可以对 Hald 图像应用任何颜色变换,然后使用此方法将变换应用于图像。

img:has_next()

如果魔杖在向前遍历列表时还有更多图像,则返回 True。

img:has_previous()

如果魔杖在向后遍历列表时还有更多图像,则返回 True。

img:identify()

通过将图像的属性打印到文件中来识别图像。属性包括图像宽度、高度、大小等。

img:identify_type()

获取潜在的图像类型

Bilevel Grayscale GrayscaleMatte Palette PaletteMatte TrueColor TrueColorMatte ColorSeparation ColorSeparationMatte

img:implode(radius, method)

创建一个新的图像,该图像是对现有图像的副本,其中图像像素按指定百分比 "内爆"。它分配创建新的 Image 结构所需的内存,并返回指向新图像的指针。

img:import_pixels(x, y, columns, rows, map, storage, pixels)

接受像素数据并将其存储在您指定的图像位置。该方法在成功时返回 False,否则如果遇到错误则返回 True。像素数据可以是 char、short int、int、ssize_t、float 或 double,顺序由 map 指定。

假设您要从红色-绿色-蓝色顺序的字符数据中上传 640x480 图像的第一条扫描线

img:import_pixels(0,0,640,1,"RGB","Char",pixels);

img:interpolative_resize(columns, rows, method)

使用插值方法调整图像大小。

img:label(label)

向您的图像添加标签。

img:level(black_point, gamma, white_point)

通过将落在指定白点和黑点之间的颜色缩放到所有可用量子范围,来调整图像的级别。提供的参数表示黑点、中点和白点。黑点指定图像中最暗的颜色。比黑点更暗的颜色将设置为零。中点指定要应用于图像的伽马校正。白点指定图像中最亮的颜色。比白点更亮的颜色将设置为最大量子值。

img:linear_stretch(black_point, white_point)

使用饱和度拉伸图像强度。

img:liquid_rescale(columns, rows, delta_x, rigidity)

使用缝合雕刻调整图像大小。

img:local_contrast(radius, strenght)

尝试增强大范围明暗过渡的外观。局部对比度增强与使用锐化蒙版进行锐化类似,但是蒙版是使用模糊距离更大的图像创建的。

img:magnify()

一个便利方法,可以将图像按比例缩放至其原始大小的两倍。

img:minify()

一个便利方法,可以将图像按比例缩放到其原始大小的一半。

img:merge_layers(method)

将当前给定图像以及之后的所有图像层进行合成,以生成一个合并后的图像层。

初始画布的大小取决于给定的 LayerMethod,并且使用第一个图像的背景颜色进行初始化。然后,使用已分配给每个单独图像的给定合成,将图像依次合成到该图像上。

img:montage(drawing, tile_geometry, thumbnail_geometry, mode, frame)

通过组合多个独立图像来创建合成图像。这些图像在合成图像上进行平铺,每个平铺下方可选地显示图像名称。

img:morph(num_frames)

此方法将一组图像进行变形。图像像素和尺寸都进行线性插值,以呈现从一个图像到下一个图像的形变效果。

img:morphology(method, iterations, kernel)

根据给定的形态学方法,将用户提供的内核应用于图像。

img:motion_blur(radius, sigma, angle)

模拟运动模糊。我们使用给定半径和标准差 (sigma) 的高斯算子对图像进行卷积。为了获得合理的结果,半径应大于 sigma。使用半径 0,MotionBlurImage() 会为您选择合适的半径。角度表示模糊运动的角度。

img:negate(gray)

反转参考图像中的颜色。灰度选项表示仅反转图像中的灰度值。

您还可以使用伽马值为 0 来减少特定通道的影响。

img:new_image(columns, rows, background)

将指定大小和背景色的空白图像画布添加到魔杖中。

img:next()

将魔杖中的下一张图像设置为当前图像。

它通常在 reset_iterator() 之后使用,之后它的第一次使用将设置第一张图像作为当前图像(除非魔杖为空)。

当没有更多图像可以返回时,它将返回 False,这种情况发生在魔杖为空时,或者当前图像为最后一张图像时。

当上述条件(图像列表结束)达到时,迭代器会自动设置,以便您可以开始使用 previous() 以相反的方向再次迭代图像,从最后一张图像开始(再次)。您可以使用 set_last_iterator() 立即跳转到此条件。

img:normalize()

通过调整像素颜色以跨越所有可用颜色的整个范围,增强彩色图像的对比度。

您还可以使用伽马值为 0 来减少特定通道的影响。

img:oil_paint(radius, sigma)

应用模拟油画的特效滤镜。每个像素都替换为由半径定义的圆形区域中最常出现的颜色。

img:opaque_paint(target, fill, fuzz, invert)

更改与 fill 定义的颜色匹配的任何像素的颜色。

img:optimize_layers()

将 GIF 序列中每张图像与其前一张图像的处置形式进行比较。由此,它尝试选择最小的裁剪图像来替换每个帧,同时保留动画的效果。

img:optimize_transparency()

采用帧优化 GIF 动画,并将覆盖的像素与动画中所有先前帧产生的处置图像进行比较。任何不会改变处置图像(因此不会影响覆盖结果)的像素都将变为透明。

警告:这直接修改了当前图像,而不是生成新的图像序列。

img:ordered_dither(threshold_map)

根据多个预定义的抖动阈值映射执行有序抖动,但跨多个强度级别进行,这些级别对于不同通道可以不同,具体取决于输入参数。

img:ping(filename)

与 read() 相同,除了返回的唯一有效信息是图像宽度、高度、大小和格式。它旨在有效地从文件获取此信息,而无需将整个图像序列读入内存。

img:ping_blob(blob)

从 blob 中 ping 图像或图像序列。

img:ping_file(file)

从打开的文件描述符中 ping 图像或图像序列。

img:polaroid(drawing, caption, angle, method)

模拟拍立得照片。

img:posterize(levels, method)

将图像减少到有限数量的颜色级别。

img:preview(preview)

使用指定图像的 9 个缩略图平铺,并在不同强度下应用图像处理操作。这有助于快速确定图像处理操作的合适参数。

img:previous()

将魔杖中的前一张图像设置为当前图像。

它通常在 set_last_iterator() 之后使用,之后它的第一次使用将设置最后一张图像作为当前图像(除非魔杖为空)。

当没有更多图像可以返回时,它将返回 False,这种情况发生在魔杖为空时,或者当前图像为第一张图像时。此时,迭代器将重置以再次正向处理图像,再次从列表中的第一张图像开始。此时添加的图像将放在第一张图像之前。

同样,此时使用 add() 或 read() 添加到魔杖的任何图像都将在第一张图像之前预先添加。从这个意义上说,这个条件与 reset_iterator() 不完全相同。

img:quantize(num_corlors, colorspace, treedepth, method, measure_error)

分析参考图像中的颜色,并选择固定数量的颜色来表示图像。算法的目标是在最大程度地减少处理时间的同时,最大程度地减少输入图像和输出图像之间的颜色差异。

img:quantizes(num_corlors, colorspace, treedepth, method, measure_error)

分析一组图像中的颜色,并选择固定数量的颜色来表示图像。算法的目标是在最大程度地减少处理时间的同时,最大程度地减少输入图像和输出图像之间的颜色差异。

img:rotational_blur(angle)

对图像进行旋转模糊。

img:raise(w, h, x, y, raise)

通过使图像边缘变亮和变暗,创建模拟的三维按钮效果。raise_info 成员的宽度和高度定义了效果的垂直和水平边缘宽度。

img:random_threshold(low, high)

根据每个像素的强度与其阈值进行比较,更改各个像素的值。结果是高对比度、双色图像。

img:read(filename)

读取图像或图像序列。图像插入到当前图像指针位置之前。

使用 set_first_iterator() 在魔杖中的所有当前图像之前插入新图像,使用 set_last_iterator() 将其追加到末尾,使用 set_iterator_index() 将图像放在给定索引之后。

img:read_blob(blob)

从 blob 中读取图像或图像序列。在所有其他方面,它与 read() 相同。

img:read_file(file)

从已经打开的文件描述符中读取图像或图像序列。否则,它与 read() 相同。

img:remap(remap_wand, method)

将图像的颜色替换为参考图像中最接近的颜色。

img:remove()

从图像列表中删除图像。

img:resample(x_resolution, y_resolution, filter)

将图像重新采样到所需的解析度。

贝塞尔 布莱克曼 盒形 卡特罗姆 立方 高斯 汉宁 厄米特 兰索斯 米切尔 点 二次 辛克 三角形

大多数滤镜都是 FIR(有限脉冲响应),但贝塞尔、高斯和辛克是 IIR(无限脉冲响应)。贝塞尔和辛克使用布莱克曼滤镜进行窗口化(降至零)。

img:roll(x, y)

根据 x 和 y 偏移图像。

img:sample(columns, rows)

使用像素采样将图像缩放到所需的尺寸。与其他缩放方法不同,此方法不会向缩放后的图像引入任何额外的颜色。

img:segment(colorspace, verbose, cluster_threshold, smooth_threshold)

通过分析颜色分量的直方图并使用模糊 C 均值技术识别与之同质的单位来分割图像。

img:selective_blur(radius, sigma, threshold)

在对比度阈值内有选择地模糊图像。它类似于锐化所有对比度超过某个阈值的图像的锐化蒙版。

img:separate(channel)

从图像中分离出一个通道,并返回一个灰度图像。通道是图像中每个像素的特定颜色分量。

img:sepia_tone(threshold)

对图像应用特效,类似于在照片暗房中通过棕褐色调得到的特效。阈值范围从 0 到 QuantumRange,它是棕褐色调程度的度量。阈值为 80 是获得合理色调的良好起点。

img:set(set_wand)

用指定魔杖中的图像替换 set_interator_index()、next()、previous() 返回的最后一个图像。

img:set_alpha_channel(alpha_type)

激活、停用、重置或设置 alpha 通道。

img:set_background_color(background)

设置图像背景颜色。

img:set_blue_primary(x, y, z)

设置图像色度蓝色主点。

img:set_border_color(border)

设置图像边框颜色。

img:set_channel_mask(channel_mask)

设置图像通道蒙版。

img:set_mask(type, clip_mask)

设置图像裁剪蒙版。

img:set_color(color)

将整个魔杖画布设置为指定颜色。

img:set_colormap_color(index, color)

设置指定颜色映射索引的颜色。

img:set_colorspace(colorspace)

设置图像颜色空间。但不修改图像数据。

img:set_compose(compose)

设置图像合成运算符,在使用 montage() 方法时,它有助于指定如何合成图像缩略图。

img:set_compression(compression)

设置图像压缩。

img:set_delay(delay)

设置图像延迟。

img:set_dispose(dispose)

设置图像处置方法。

img:set_endian(endian)

设置图像字节序方法。

img:set_extent(columns, rows)

设置图像大小(即列和行)。

img:set_filename(filename)

设置序列中特定图像的文件名。

img:set_fuzz(fuzz)

设置图像模糊。

img:set_gamma(gamma)

设置图像伽马。

img:set_green_primary(x, y, z)

设置图像色度绿色主点。

img:set_interpolate_method(method)

设置图像插值像素方法。

img:set_iterations(iterations)

设置图像迭代次数。

img:set_matte(matte)

设置图像蒙版通道。

img:set_matte_color(matte)

设置图像 alpha 颜色。

img:set_page(w, h, x, y)

设置图像的页面几何形状。

img:set_progress_monitor(progress_monitor, client_data)

将魔杖图像进度监视器设置为指定方法,并返回以前的进度监视器(如果有)。

img:set_red_primary(x, y, z)

设置图像色度红色主点。

img:set_rendering_intent(intent)

设置图像渲染意图。

img:set_resolution(x, y)

设置图像解析度。

img:set_scene(scene)

设置图像场景。

img:set_ticks_perseconds(ticks)

设置图像每秒刻度数。

img:set_type(itype)

设置图像类型。

img:set_units(units)

设置图像解析度单位

img:set_virtual_pixel_method(method)

设置图像虚拟像素方法。

img:set_white_point(x, y, z)

设置图像色度白点。

img:shade(gray, azimuth, elevation)

在图像上照射远光,以产生三维效果。您可以使用方位角和仰角控制光线的定位;方位角以 x 轴的度数测量,仰角以 Z 轴上方的像素测量。

img:shadow(alpha, sigma, x, y)

模拟图像阴影。

img:shavel(columns, rows)

从图像边缘修剪像素。它分配创建新 Image 结构所需的内存,并返回指向新图像的指针。

img:shear(background, x_shear, y_shear)

沿 X 轴或 Y 轴滑动图像的边缘,创建平行四边形。X 方向剪切沿 X 轴滑动边缘,而 Y 方向剪切沿 Y 轴滑动边缘。剪切量由剪切角控制。对于 X 方向剪切,x_shear 相对于 Y 轴测量,类似地,对于 Y 方向剪切,y_shear 相对于 X 轴测量。从剪切图像中留下的空三角形将用背景色填充。

img:sigmoidal_contrast(sharpen, alpha, beta)

使用非线性 S 形对比度算法调整图像的对比度。使用 S 形传递函数增加图像的对比度,而不会使高光或阴影饱和。对比度指示增加对比度的程度(0 表示没有;3 表示典型;20 表示过分);中点指示中间色在结果图像中的位置(0 表示白色;50 表示中灰色;100 表示黑色)。将 sharpen 设置为 True 以增加图像对比度,否则对比度会降低。

img:similarity(reference, metric, similarity_threshold, offset, similarity)

比较图像的参考图像并返回最佳匹配偏移量。此外,它还返回一个相似度图像,使完全匹配的位置为白色,如果没有任何像素匹配,则为黑色,否则为介于两者之间的灰色级别。

img:sketch(radius, sigma, angle)

模拟铅笔素描。我们将图像与给定半径和标准差 (sigma) 的高斯算子卷积。为了获得合理的结果,半径应大于 sigma。使用半径 0,sketch() 会为您选择合适的半径。角度给出模糊运动的角度。

img:smush(stack, offset)

将当前图像指针到图像列表末尾的所有图像,如果堆栈参数为真,则从上到下地压缩在一起,否则从左到右地压缩在一起。

img:solarize(threshold)

对图像应用特殊效果,类似于在暗房中通过选择性地将光照射到感光纸的区域而实现的效果。阈值范围从 0 到 QuantumRange,表示太阳化的程度。

img:sparse_color(method, num_args, args)

给定一组坐标,使用各种方法在整个图像上插值在这些坐标处找到的颜色。

img:splice(w, h, x, y)

将纯色拼接成图像。

img:spread(method, radius)

一种特殊效果方法,它随机地将半径参数定义的块中的每个像素位移。

img:statistic(stype, w, h)

用指定宽度和高度的邻域中的相应统计数据替换每个像素。

img:stegano(watermark, offset)

在图像中隐藏数字水印。稍后恢复隐藏的水印以证明图像的真实性。偏移量定义了图像中隐藏水印的起始位置。

img:stereo(offset_wand)

合成两张图像,生成一张包含立体图像对的左右图像的合成图像。

img:swirl(degrees, method)

以图像中心为旋转中心旋转像素,其中角度表示每个像素移动的弧度范围。随着角度从 1 变化到 360,您会获得更戏剧性的效果。

img:texture(texture_wand)

在图像画布上横向和纵向重复平铺纹理图像。

img:threshold(threshold)

根据每个像素的强度与阈值的比较,改变单个像素的值。

img:thumbnail(columns, rows)

将图像大小更改为给定的尺寸并删除任何关联的配置文件。目的是生成适合在 Web 上显示的小型低成本缩略图图像。

img:tint(tint, blend)

将颜色向量应用于图像中的每个像素。向量的长度对于黑白色为 0,对于中间色为最大值。向量加权函数为 f(x)=(1-(4.0((x-0.5)(x-0.5)))).

img:transpose()

通过围绕中心 x 轴反射像素并同时旋转 90 度,创建一个垂直镜像图像。

img:transverse()

通过围绕中心 y 轴反射像素并同时旋转 270 度,创建一个水平镜像图像。

img:transform_colorspace(colorspace)

转换图像颜色空间,设置图像颜色空间,同时将图像数据转换为该颜色空间。

img:transparent_paint(target, alpha, fuzz, invert)

更改与 fill 定义的颜色匹配的任何像素的颜色。

img:trim(fuzz)

从图像中删除边缘,这些边缘是背景颜色。

img:unique_colors()

除了一个以外,丢弃所有像素颜色。

img:unsharp_mask(radius, sigma, gain, threshold)

锐化图像。我们将图像与给定半径和标准差 (sigma) 的高斯算子卷积。为了获得合理的结果,半径应大于 sigma。使用半径 0,UnsharpMaskImage() 会为您选择合适的半径。

img:vignette(radius, sigma, x, y)

以晕影风格柔和图像边缘。

img:wave(amplitude, wave_length, method)

通过沿着正弦波垂直移动像素来创建图像中的“波纹”效果,该正弦波的振幅和波长由给定参数指定。

img:denoise(<double> threshold, <double> softness)

使用小波变换从图像中去除噪声。

img:white_threshold(threshold)

与 threshold() 类似,但将所有高于阈值的像素强制为白色,而将所有低于阈值的像素保持不变。

img:write(filename)

将图像写入指定的文件名。如果文件名参数为 NULL,则图像将写入由 read() 或 set_filename() 设置的文件名。

img:write_file(file)

将图像写入打开的文件描述符。

img:writes(filename, adjoin)

写入图像或图像序列。

img:write_files(file)

将图像序列写入打开的文件描述符。

作者

kwanhur <huang_hua2012@163.com>,VIPS Inc.

版权和许可

此模块根据 MIT 许可证发布。

版权所有 (C) 2018,kwanhur <huang_hua2012@163.com>,VIPS Inc.

保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用本软件,无论是否修改:

  • 源代码的再分发必须保留上述版权声明、此条件列表以及以下免责声明。

  • 二进制形式的再分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表以及以下免责声明。

本软件由版权持有人和贡献者“按现状”提供,并且任何明示或暗示的担保,包括但不限于适销性和特定用途适用性的默示担保均予以免除。在任何情况下,版权持有人或贡献者均不对因使用本软件而引起的任何直接、间接、附带、特殊、惩罚性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断)承担责任,无论是在合同、严格责任或侵权行为(包括疏忽或其他)中,即使已告知可能会发生此类损害。

作者

tom2nonames

许可证

mit

依赖项

luajit

版本