异或两图
cvt 00.png -compose xor 03.png -geometry 92x92+0+0 -composite 03new.png
FOR %a in (??.png) DO cvt circle.png -compose xor %a -geometry 92x92+0+0 -composite XOR/%a
得到负片
convert input.png -negate output.png
缩小图片以固定高度(宽度300是很宽的,只保证不超过)并保持宽高比不变:
FOR %a in (*.png) DO cvt %a -resize 300x60 H60/%a
FOR %a in (*.png) DO cvt %a -resize 300x48 H48/%a
FOR %a in (*.png) DO cvt %a -resize 300x32 H32/%a
FOR %a in (*.png) DO cvt %a -resize 300x24 H24/%a
PNG格式可以进一步减少尺寸:
MD C256
FOR %a in (*.png) DO pngnq -n 256 -Q f -s 1 -e .png -d C256 %a
FOR %a in (*.png) DO pngnq -n 64 -Q f -s 1 -e .png -d C64 %a
FOR %a in (*.png) DO pngnq -n 32 -Q f -s 1 -e .png -d C32 %a
FOR %a in (*.png) DO pngnq -n 16 -Q f -s 1 -e .png -d C16 %a
颜色数量继续减少会压缩处理快些,图片尺寸也进一步缩小
pngnq -n 64 -Q f -s 1 -e .png -d C64 SenLinZiYuan.png
极端情况:黑白图
FOR %a in (*.png) DO pngnq -n 2 -Q f -s 1 -e .png -d C256 %a
FOR %a in (DSC_9830.JPG,DSC_0701.JPG,DSC_1118.JPG,DSC_9577.JPG) DO convert %a -resize 6000x2400 -quality 92 768K/%a
FOR %a in (*.jpg) DO cvt %a -resize 33.33% -quality 98 SMALL/%a
FOR %a in (*.jpg) DO magick %a -resize 50% -quality 99 SMALL/%a
FOR %a in (*.jpg) DO magick %a -resize 33.33% -quality 98 SMALL/%a
FOR %a in (*.jpg) DO magick %a -resize 33.33% -quality 100 SMALL/%a
如果还需要调整方向,处理手机拍摄可能出现的图片方向问题:
FOR %a in (*.jpg) DO cvt %a -auto-orient -resize 33.33% -quality 98 SMALL/%a
FOR %a in (*.jpg) DO magick %a -auto-orient -resize 50% -quality 98 SMALL/%a
FOR %a in (*.jpg) DO magick %a -auto-orient -resize 33.33% -quality 100 SMALL/%a
合并两个图片(第二个为带有透明度的png格式):
convert oldPngFile.jpg -compose over circle_mask.png -composite composed_result.jpg
直接转换成灰度图像:
cvt dsc_8845.JPG -fx 0.3*r+0.55*g+0.15*b GRA_8845.jpg
cvt dsc_5860.JPG -fx 0.299*r+0.587*g+0.114*b GRA_5860-BEST.jpg
FOR %a in (*.jpg) DO cvt %a -fx 0.3*r+0.55*g+0.15*b Gray/%a
通常的公式为:Gray = 0.299×Red + 0.587×Green + 0.114×Blue
最精确的公式为:Gray = (0.2126×Red2.2 + 0.7152×Green2.2 + 0.0722×Blue2.2)1/2.2
但这个没法实用,太慢了,我觉得可以这样近似:
cvt dsc_5860.JPG -fx sqrt(0.2126*r*r+0.7152*g*g+0.0722*b*b) GRA_5860-Best.jpg
下次把上面的结果与下面这个对照比较看看:
cvt dsc_5860.JPG -fx sqrt(0.22*r*r+0.7*g*g+0.08*b*b) GRA_5860-Best.jpg
直接转换成黑白二值图像:
FOR %a in (*.jpg) DO cvt %a -monochrome BlackWhite/%a
改变解析度(DPI)元数据:
ImageMagick command for change the resolution:
convert -density 1200 -units PixelsPerInch DSC_0017.JPG DPI1200.JPG
convert -density 300 -units PixelsPerCentiMeter FolderOpen.gif FolderOpen-300DPCM.png
如果用resample开关的话,图片的像素尺寸也会跟着变,不太合适:
convert -resample 1200 -units PixelsPerInch DSC_0017.JPG DPI1200larger.JPG
exiftool可以做到只改变JFIF头中的DPI数据而不影响图像质量(不重新编码图像数据)
./exiftool -jfif:Xresolution=500 -jfif:Yresolution=500 t/images/DSC_0017_ORIG.JPG
对于TIFF格式是这样的:
./exiftool -v2 -exif:XResolution=400 -exif:YResolution=400 1200DPI.tiff
./exiftool -exif:Xresolution=400 -exif:Yresolution=400 DSC_0017.TIFF
RGB <=>CMYK 转换
G:\Photo>cvt -colorspace CMYK DSC_0017.JPG CMYK.JPG
G:\Photo>cvt -colorspace RGB CMYK.JPG RGB.JPG
转换mp4为jpg
需要安装ffmpeg
yum install ffmpeg ffmpeg-devel
convert 2.mp4[50] 2.jpg
剪裁部分图片:剪裁出宽600高400的图像,起始偏移为X=100,Y=50:
cvt -crop 600x400+100+50 G:/Photo/DSC_0017_ORIG.JPG G:/Photo/Croped.JPG
剪裁要注意的是,如果是GIF图片,需要加上一个repage的参数才能确保尺寸真正被裁减小,如下所示:
cvt -crop 400x300+200+100 -repage 400x300+0+0 Frame1.gif Frame1_croped_400x300.gif
repage GIF 调整的应该是GIF文件的06~07(Width)和08~09(Height),高位在高字节处
设置某颜色为透明色(白色为例)
cvt kamo_title.png -transparent white kamo_title_trans.png
分离颜色通道:使用-channel 和 –separete 参数
convert ..\SampleImages\Lena.png -channel R -separate Lena_R.png
convert ..\SampleImages\Lena.png -channel G -separate Lena_G.png
convert ..\SampleImages\Lena.png -channel B -separate Lena_B.png
另外一种分离方式:同时提取三个通道。
convert ..\SampleImages\Lena.png -separate Lena_RGB_%d.png
合并颜色通道:使用-combine 参数
convert Lena_R.png Lena_G.png Lena_B.png -combine Lena2.png
批量转换MOV视频文件为MP4格式,假设原始宽度为1920(可以改为960等等,以便缩小):
ls *MOV|while read id;do (ffmpeg -i "$id" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k "${id%%.*}.mp4" );done
ls *MOV|while read id;do (ffmpeg -i "$id" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=960:-1" -acodec libmp3lame -ab 128k "${id%%.*}.mp4" );done
ls *mov|while read id;do (ffmpeg -i "$id" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k "${id%%.*}.mp4" );done
ffmpeg -i test.flv -vf curves=vintage out.flv
类似Photoshop里面的曲线调整,这里的vintage是ffmpeg自带的预设,实现复古画风,还可以直接加载其他的Photoshop预设文件并在其基础上加以调整,如下:
ffmpeg -i test.flv -vf curves=psfile='test.acv':green='0.45/0.53' out.flv
其中的acv预设文件实现的是加强对比度,再次基础上调整绿色的显示效果,以上两个命令的最终效果如下
得到详细的图片信息:
缩小视频分辨率:
D:\Photo\2020-01-04MobileCamera>ffmpeg -i VID_20191229_131031.mp4 -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1024:-1" -acodec libmp3lame -ab 128k sm.mp4
FOR %a in (??.png) DO identify %a
identify -verbose info: DSC_0017.JPG
Image: DSC_0017.JPG
Format: JPEG (Joint Photographic Experts Group JFIF format)
Class: DirectClass
Geometry: 1232x816+0+0
Resolution: 300x300
Print size: 4.10667x2.72
Units: PixelsPerInch
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
......