首页 > 系统相关 >libvips 一个最好用的高性能、低内存、跨平台的图片处理库

libvips 一个最好用的高性能、低内存、跨平台的图片处理库

时间:2024-05-08 21:13:45浏览次数:13  
标签:Image i2 跨平台 内存 libvips var image NetVips png

一个可以媲美OpenCV的开源库,它具有高性能、低内存、跨平台、无内存泄漏的特性。

项目简介

这是用C++开发的图像处理库,支持的API超过300多个,涵盖了算术、颜色、图片转换、卷积、形态、马赛克、合并、切割等。

支持多种图像格式,包括:JPEG、JPEG2000、JPEG-XL、TIFF、PNG、WebP、HEIC、AVIF、FITS、Matlab、OpenEXR、PDF、SVG、HDR、PPM/PGM/PFM、CSV、GIF、分析、NIfTI、DeepZoom 和 OpenSlide。支持相应的图片格式直接保存,不需转换。

性能好、运行速度非常快、占用很少的内存,相对同类库,表现最优秀,性能快5倍以上。

 官方提供SDK

官方提供各种语言的SDK,包括:Ruby、Python、PHP、C#/.Net、Go、Lua、Crystal、Elixir。

 使用例子

在C#使用还是比较方便,通过Nuget先安装库。此示例加载png文件、并进行颜色转换,并以png格式保存。

using NetVips;var i = NetVips.Image.NewFromFile("E:projectTestProjectConsoleAppConsoleApp.png");var i2 = i.CMC2LCh();i2.Pngsave("E:projectTestProjectConsoleAppConsoleAppCMC2LCh.png");

 简单使用

通道分割

NetVips.Image image = NetVips.Image.NewFromFile("E:projectTestProjectConsoleAppConsoleApp.png", memory: false, access: Enums.Access.Random);NetVips.Image[] images = image.Bandsplit();foreach(var item in images){    item.Pngsave("E:projectTestProjectConsoleAppConsoleAppBandsplit"+DateTime.Now.Ticks+".png");}

 高斯滤波

NetVips.Image image = NetVips.Image.NewFromFile(imgFile, memory: false, access: Enums.Access.Random);NetVips.Image gauss = image.Gaussblur(15);i2.Pngsave(imgPath+"gauss.png");

 增强绿色通道,锐化图像

var image = Image.NewFromFile(imgFile, access: Enums.Access.Sequential);var multiply = image * new[] { 1, 2, 1 };using var mask = Image.NewFromArray(new[,]{    {-1, -1, -1},    {-1, 16, -1},    {-1, -1, -1}}, scale: 8);var convolve = multiply.Conv(mask, precision: Enums.Precision.Integer);convolve.Pngsave(imgPath + "convole.png");

 Mosaic

var i1 = Image.NewFromFile("E:\\project\\TestProject\\ConsoleApp\\ConsoleApp\\d.png");var i2 = i.CMC2LCh();i2 = i.Mosaic(i2, Enums.Direction.Horizontal, 0, 0, 10, 10);i2.Pngsave("E:\\project\\TestProject\\ConsoleApp\\ConsoleApp\\Mosaic.png");

 GitHub:https://github.com/libvips/libvips

官网:https://www.libvips.org/

标签:Image,i2,跨平台,内存,libvips,var,image,NetVips,png
From: https://www.cnblogs.com/firespeed/p/18180883

相关文章

  • 开源的内存虚拟硬盘软件ImDisk的使用方法和高级用法
    ImDisk是一款开源的内存虚拟硬盘软件,它允许你在Windows平台上创建并管理虚拟磁盘。以下是ImDisk的使用方法和高级用法的详解:一、使用方法详解创建一个虚拟磁盘映像文件打开ImDisk虚拟磁盘管理器。在菜单栏中选择“操作”>“创建空白映像文件”。按照提示完成创建过程。......
  • java虚拟机内存结构——类加载器,运行时数据区,执行引擎,本地方法接口。《深入理解JAVA虚
    ##类加载器类加载器当Java程序需要使用某个类时,类加载子系统负责找到对应的.class文件,并将其加载到JVM的方法区中每一个类加载器,都拥有一个独立的类名称空间。只有在这两个类是由同一个类加载器加载的前提下才有意义##运行时数据区###线程共享####堆:内......
  • MMU内存管理
    MMU内存管理目录MMU内存管理1.MMU简述2.MMU的功能3.内存分段与分页3.1内存分段3.1.1分段的不足3.2内存分页3.2.1分页的优势3.2.2分页的映射3.2.3多级页表参考1.MMU简述MMU(MemoryManagementUnit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟内存管理。它的主要功能......
  • 随笔-调试-valgrind进行内存越界检查
    valgrind进行内存越界检查valgrind--log-file='valgrind_report.log'--time-stamp=yes–track-origins=yes--tool=memcheck--leak-check=full--show-leak-kinds=all./exec–track-origins=yes:是否显示未定义的变量,在堆、栈中被定义没有被initialised的变量都被定义成o......
  • MMU(内存管理单元)
    内存管理单元(MMU)MMU的概念MMU是一种硬件设备,也称为内存管理单元,它位于计算机系统的中央处理器(CPU)和内存之间,负责处理中央处理器(CPU)的内存访问请求,将实现对虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,而在较为简单的计算机体系结构中,则负责总线......
  • MMU内存管理单元
      内存管理单元(MemoryManagementUnit,MMU)是计算机中的一个重要组件,负责处理CPU对内存的访问请求。MMU主要有以下几个功能:地址转换:MMU负责将逻辑地址(由CPU生成的地址)转换为物理地址(实际存储在内存中的地址)。这种地址转换是通过页表或段表等数据结构来实现的。内存保护:MM......
  • MMU内存管理单元
    V1.02024年5月7日发布于博客园目录MMU概述MMU关闭时MMU打开时MMU页表段大页小页极小页为什么要有MMU?MMU的关键功能:MMU在C语言编程中的应用:MMU在ARM系统中参考资料MMU概述MMU即内存管理单元(英语:memorymanagementunit,缩写为MMU),有时称作分页内存管理单元(英语:pagedmemorym......
  • Linux系统内核与内存相关知识
    目录目录文件系统NTFS文件系统的概述可靠性添加了功能POSIX支持删除限制NTFS的优点NTFS的缺点NTFS命名约定FAT概述FAT命名约定FAT的优点FAT的缺点NTFS文件系统和FAT32系统的区别区别Linux内核的作用一、前言二、Linux内核的作用三、驱动开发为什么要学习内核四、需要学习......
  • MMU--内存管理单元
    MMU--内存管理单元目录MMU--内存管理单元简介作用1地址转换2虚拟内存管理3内存保护4高速缓存管理虚拟内存简介​ MMU负责的是虚拟地址与物理地址的转换.提供硬件机制的内存访问授权作用1地址转换MMU的主要功能之一是进行地址转换。在计算机系统中,程序使用的地址是逻辑......
  • 查看PHP-FPM的内存占用、进程个数等信息
    查看每个PHP-FPM进程的内存占用(并排序):1ps-ylCphp-fpm--sort:rss这个命令会显示所有php-fpm进程的内存占用情况,并按内存占用大小进行排序。查看当前php-fpm总进程数:1ps-ylCphp-fpm--sort:rss|wc-l这个命令会列出php-fpm的所有进程,然后通过wc-l计算行数,从而得到......