免费jsp源码分享网站,win7用自己ip做网站,外贸做双语网站好还是单语网站,wordpress 调用中等图片原文链接
前言
有自己机房的公司一般都有一套存储系统用于存储公司的图片、视频、音频、文件等数据#xff0c;常见的存储系统有以NAS、FASTDFS为代表的传统文件存储#xff0c;和以Minio为代表的对象存储系统#xff0c;随着云服务的兴起很多公司逐渐将数据迁移到以阿里云…原文链接
前言
有自己机房的公司一般都有一套存储系统用于存储公司的图片、视频、音频、文件等数据常见的存储系统有以NAS、FASTDFS为代表的传统文件存储和以Minio为代表的对象存储系统随着云服务的兴起很多公司逐渐将数据迁移到以阿里云OSS为代表的云对象存储OSS的好处是不但解决了数据的存储还自带的很多文件的处理功能如图片的缩放、打水印、裁剪等功能例如我们要获获取一张宽为200大小的图片只需要在原图后面增加?x-oss-processimage/resize,w_200这个参数就可以了处理图片确实非常方便。 https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-processimage/resize,w_200。 传统的NAS、FASTDFS只有存储功能没有文件处理能力的我们可以使用图片处理软件给它加上类似的图片处理功能。常用的图片处理软件有Imagemagick、GraphicsMagick、OpenCV对应的JAVA操作库为im4java、JMagick、Javacv。用上这些图片处理软件再配置NginxLua或者OpenResty就可以让你的传统NAS存储也也有像OSS一样的图片处理能力。
ImageMagick、GraphicsMagick的安装
ImageMagick官网下载
官网下载地址https://imagemagick.org/script/download.php 以windows为例下载ImageMagick-7.1.1-15-Q16-HDRI-x64-dll.exe 然后下一步、下一步安装就好了安装完成后输入magick -version检查是否安装成功
PS C:\Users\Administrator magick -version
Version: ImageMagick 7.1.1-15 Q16-HDRI x64 a0a5f3d:20230730 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenCL OpenMP(2.0)
Delegates (built-in): bzlib cairo flif freetype gslib heic jng jp2 jpeg jxl lcms lqr lzma openexr pangocairo png ps raqm raw rsvg tiff webp xml zip zlib
Compiler: Visual Studio 2022 (193532217)GraphicsMagick官网下载
GraphicsMagick最初源于ImageMagick5.5.22002年11月但从那时起就完全独立于ImageMagick项目。自从ImageMagick的fork以来许多作者使用开放的开发模型进行了许多改进参见新闻但没有破坏API或实用程序操作。下载地址 http://www.graphicsmagick.org/download.html 安装完成后输出gm检测是否安装成功。
C:\Users\Administratorgm
GraphicsMagick 1.3.40 2023-01-14 Q16 http://www.GraphicsMagick.org/
Copyright (C) 2002-2023 GraphicsMagick Group.
Additional copyrights and licenses apply to this software.
See http://www.GraphicsMagick.org/www/Copyright.html for details.
Usage: gm command [options ...]JAVA操作
JAVA操作GraphicsMagick可以使用im4java 引入POM依赖im4java dependencygroupIdorg.im4java/groupIdartifactIdim4java/artifactIdversion1.4.0/version/dependencyim4java官网地址 https://im4java.sourceforge.net
im4java源码地址im4java download | SourceForge.net
JAVA操作ImageMagick可以使用JMagick,引入POM依赖
dependencygroupIdjmagick/groupIdartifactIdjmagick/artifactIdversion6.6.9/version
/dependency
JMagick官网地址www.jmagick.org
JMagick源码地址JMagick download | SourceForge.net
图片信息获取
命令获取图片信息 magick identify .\1.jpg
.\1.jpg PNG 1920x1080 1920x108000 8-bit sRGB 1.31707MiB 0.000u 0:00.000//格式化输出
magick identify -format %W,%H,%B,%f,%m .\1.jpg
1920,1080,1381050,1.jpg,PNG
JAVA获取图片信息 Testpublic void info() throws IOException, InterruptedException, IM4JavaException {String iImageDir C:\\Users\\Administrator\\Desktop\\img\\1.jpg;IMOperation operation new IMOperation();//格式化输出//operation.format(%W,%H,%B,%f,%m);operation.addImage(iImageDir);IdentifyCmd indentity new IdentifyCmd();ArrayListOutputConsumer output new ArrayListOutputConsumer();indentity.setOutputConsumer(output);indentity.run(operation);ArrayListString cmdOutput output.getOutput();String line cmdOutput.get(0);System.out.println(line);//C:\Users\Administrator\Desktop\img\1.jpg PNG 1920x1080 1920x108000 8-bit sRGB 1.31707MiB 0.000u 0:00.000}注意事项 如果运行代码报org.im4java.core.CommandException: java.io.IOException: Cannot run program identify: CreateProcess error2, 系统找不到指定的文件。是因为刚安装软件系统没找到命令重启电脑后就可以解决。 可以使用-format %W,%H,%B,%f,%m来格式化图片信息的输出 具体的格式化参数有很多详细可以参考官方文档你想要的图片信息应该都是有的。https://imagemagick.org/script/escape.phps
图片缩放
命令图片缩放
magick .\1.jpg -resize 200x100 1_w200h100.jpg
magick identify -format %W,%H,%B,%f,%m .\1_w200h100.jpg
输出:
178,100,8003,1_w200h100.jpg,JPEGJAVA图片缩放 Testpublic void resizeImg() throws IOException, InterruptedException, IM4JavaException {String srcImagePath C:\\Users\\Administrator\\Desktop\\img\\1.jpg;Integer width 200;Integer height 100;String newImagePath C:\\Users\\Administrator\\Desktop\\img\\1_w200h100.jpg;IMOperation op new IMOperation();op.addImage(srcImagePath);op.resize(width, height);op.addImage(newImagePath);ImageCommand convert new ConvertCmd();convert.run(op);}注意事项
这里我们使用 -resize 200x100 想生成一张200x100的图片结果输出图片是178x100,因为原始图片为1920x1080为了保持图片宽高比例做了等比例缩放防止图片变形。
图片打水印
命令图片打水印 magick composite -geometry 200x20010050 -gravity center .\avatar.png .\1.jpg 1_avater.jpgJAVA图片打水印 Testpublic void testaddImgWatermark() throws Exception {String srcImagePathD://img/1.jpg;String destImagePathD://img/1_avater.jpg;String waterImgPathD://img/avatar.png;IMOperation op new IMOperation();//水印大小op.geometry(1000,1000,1000,500);// 水印图片位置NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEastop.gravity(NorthEast);// 水印透明度op.dissolve(100);// 水印op.addImage(waterImgPath);// 原图op.addImage(srcImagePath);// 目标op.addImage(destImagePath);ImageCommand cmd new CompositeCmd();cmd.run(op);}
注意事项
-geometry 200x20010050 中的200x200是设置水印图片的大小,20050设置水印图片相对于gravity的位置 -gravity center是给定水印的相对原图的位置支持NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast这个参数和阿里OSS加水印的也是一样的。
最终打出水印的效果如下 图片裁剪
命令图片裁剪
magick convert -gravity center .\1_avater.jpg -crop 200x20010050 1_cut.jpgJAVA图片裁剪 Testpublic void testCrop() throws Exception {String srcImagePathD://img//1.jpg;String destImagePathD://img/1_cut.jpg;IMOperation op new IMOperation();op.gravity(center);op.addImage(srcImagePath);op.crop( 200,200,100,50);op.addImage(destImagePath);ImageCommand cmd new ConvertCmd();cmd.run(op, srcImagePath, destImagePath);}最张裁剪效果 注意事项
-crop 200x20010050 结合 -gravity center刚好可以把我们打上的水印裁剪出来裁剪出的图片在左右两边还是有一点红色边框这个可能是计算有一两个像素误差。
图片加参数自动处理
有了以上的图片处理命令之后想要实现OSS ?x-oss-processimage/resize,w_200这样加参数处理图片可以使用NginxLua来实现集成了Lua模块的Nginx项目OpenResty
例如我们原始图片地址
http://127.0.0.1/img/1.jpg
自动缩放图片尺寸
http://127.0.0.1/img/1_400x400.jpg
下载安装 OpenResty - Download下载安装LUA Release Lua for Windows v5.1.5-52 Released · rjpcomputing/luaforwindows · GitHub
Nginx配置引入Lua:
http {lua_package_path D:\software\openresty\lualib\\?.lua;;;lua_package_cpath D:\software\openresty\lualib\\?.so;;;
}Nginx配置文件中可以写成这样: location ~ /img/(\d)_(\d)x(\d).jpg$ {root D:/img;set $img_root D:/img/img;set $fileName ngx.arg[1];set $width ngx.arg[2];set $height ngx.arg[3];set $origin ${img_root}/${fileName}.jpg ;set $file ${img_root}/${fileName}_${width}x${height}.jpg;if (!-f $file) {rewrite_by_lua local command magick ..ngx.var.origin.. -resize ..ngx.var.width..x ..ngx.var.height.. ..ngx.var.file;os.execute(command);;}}当访问(http://127.0.0.1/img/1_400x400.jpg时可动态生成对应尺寸图片类似OSS的功能 生成的文件当然我们还可以使用LuaRedis缓存这里生成的文件如果有CDN还可以配置CDN缓存这些文件下次就可以从CDN缓存直接取对应尺寸的图片了减少服务器处理图片的性能消耗。很多大厂不将这种图片处理下沉到CDN边缘节点利用离用户最近CDN节点完成图片数据的处理减少数据回源从而减少中心服务器的性能消耗。 当然这个只是使用NginxLuaGraphicsMagick来实现简单的图片裁剪功能如果要实现阿里OSS图片处理要比这个复杂的多不仅要解决大量文件存储高可要和自动扩容问题还要解决高并发下图片裁剪的性能问题们只是通过这个案例了解图片自动缩放的基本原理原理看起来比较简单想要做的好而且还要给全国那么多企业用要保持高可用、高性能就比较有难度了。
总结
本文主要介绍了常用图片处理软件ImageMagick的使用并通过命令和JAVA代码演示图片信息的获取、缩放、打水印、裁剪功能在最后通过OpenRestyLua实现类似OSS的自动图片缩放功能。 文章转载自: http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.incmt.com.gov.cn.incmt.com http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.iterlog.com.gov.cn.iterlog.com http://www.morning.pgjyc.cn.gov.cn.pgjyc.cn http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn http://www.morning.fsbns.cn.gov.cn.fsbns.cn http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn http://www.morning.ymhzd.cn.gov.cn.ymhzd.cn http://www.morning.dtzxf.cn.gov.cn.dtzxf.cn http://www.morning.jrhcp.cn.gov.cn.jrhcp.cn http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.smyxl.cn.gov.cn.smyxl.cn http://www.morning.fykqh.cn.gov.cn.fykqh.cn http://www.morning.qbgdy.cn.gov.cn.qbgdy.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.youngbase.cn.gov.cn.youngbase.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.npxcc.cn.gov.cn.npxcc.cn http://www.morning.nywrm.cn.gov.cn.nywrm.cn http://www.morning.rwlnk.cn.gov.cn.rwlnk.cn http://www.morning.hlnrj.cn.gov.cn.hlnrj.cn http://www.morning.jrtjc.cn.gov.cn.jrtjc.cn http://www.morning.qjbxt.cn.gov.cn.qjbxt.cn http://www.morning.jtmql.cn.gov.cn.jtmql.cn http://www.morning.burpgr.cn.gov.cn.burpgr.cn http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn http://www.morning.dgsr.cn.gov.cn.dgsr.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.xnhnl.cn.gov.cn.xnhnl.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.hlnrj.cn.gov.cn.hlnrj.cn http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn http://www.morning.xxrwp.cn.gov.cn.xxrwp.cn http://www.morning.mnlk.cn.gov.cn.mnlk.cn http://www.morning.bygyd.cn.gov.cn.bygyd.cn http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.swlwf.cn.gov.cn.swlwf.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn http://www.morning.wfwqr.cn.gov.cn.wfwqr.cn http://www.morning.pjqxk.cn.gov.cn.pjqxk.cn http://www.morning.pdbgm.cn.gov.cn.pdbgm.cn http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.mngyb.cn.gov.cn.mngyb.cn http://www.morning.nbpqx.cn.gov.cn.nbpqx.cn http://www.morning.cnqdn.cn.gov.cn.cnqdn.cn http://www.morning.qhfdl.cn.gov.cn.qhfdl.cn http://www.morning.rnmdp.cn.gov.cn.rnmdp.cn http://www.morning.ztcxx.com.gov.cn.ztcxx.com http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.hbhnh.cn.gov.cn.hbhnh.cn http://www.morning.mwkwg.cn.gov.cn.mwkwg.cn http://www.morning.wmpw.cn.gov.cn.wmpw.cn http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.fdwlg.cn.gov.cn.fdwlg.cn http://www.morning.kkhf.cn.gov.cn.kkhf.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.dhrbj.cn.gov.cn.dhrbj.cn http://www.morning.duckgpt.cn.gov.cn.duckgpt.cn http://www.morning.ghslr.cn.gov.cn.ghslr.cn http://www.morning.rljr.cn.gov.cn.rljr.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn http://www.morning.lydtr.cn.gov.cn.lydtr.cn http://www.morning.llcgz.cn.gov.cn.llcgz.cn