pyCoreImage Learn

PyCoreImage

安装

首先,需要下载安装包,下载地址:

安装步骤:

easy_install pip
pip install setuptools --upgrade
python setup.py --user
pip install scikit-image --user

pyci_demo.py文件头中也有注释,包含了安装说明

# Install
    1. pip install pyobjc --ignore-installed --user
    2. pip install numpy --ignore-installed --user
    3. pip install scikit-image --user

确保安装 ok:

$ python
>> from pycoreimage.pyci import cimg

如果输出没有错误,那么代表安装 ok。

如果运行上面的导入库,出现其他提示信息,代表安装有问题。需要卸载后重新安装。
卸载方法 :

1)列出已经安装的库列表,存入文件

$ pip freeze > list.txt

2)编辑list.txt ,筛选出带 pyobjc 和 pycoreimage 的库,然后保存。

3)从文件中批量删除已经安装的库

$ pip uninstall -r list.txt

高斯模糊滤镜的例子

源文件 gaussianBlur.py

# coding: utf-8
from pycoreimage.pyci import *
def zxdemo_minimal(filepath):
	#读取文件
    img = cimg.fromFile(filepath)
	#图片缩放
    img = img.resize(500, preserveAspect=1)
	#高斯模糊
    r = 20
    blur = img.gaussianBlur(radius=r)
	#图片保存
    blur.save(filepath + '.CIGaussianBlur.jpg')
    #显示图片
    show([img, blur], title=['input', 'Gaussian blur with radius {}'.format(r)])
zxdemo_minimal('/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic')

可以使用 jupyter-notebook 边写边运行。

使用详细步骤说明

一般包含几个步骤:

  • 导入库文件 from pycoreimage.pyci import *

    pycoreimage supports all file formats that Core Image supports, including JPEG, PNG, and HEIC.

    支持 JGPE,PNG,HEIC 文件

  • 创建 cimg 对象

fpath = 'resources/YourFacialImage.HEIC'
image = cimg.fromFile(fpath)
  • 对图片添加滤镜
gaussianBlurImg = image.gaussianBlur(radius=30)
  • 显示图片
show([image, gaussianBlurImg], title=['input', 'Gaussian blur with radius {}'.format(r)])

常见操作

生成二维码

cimg.fromGenerator('CIQRCodeGenerator', message='Hello World!')

平移

Shift the image by the amount (tx, ty) with the translate command:

img.translate(tx, ty)

缩放

Use the scale command to resize an image:

img.scale(sx, sy)

旋转

Rotate the image about its center point with the rotate command:

img.rotate(radians)

裁剪

Crop the image to the rectangle [x, y, width, height] with the crop command:

img.rotate(radians)

保存

img.save('demo2.jpg')

显示

show(img, title='Demo 2: from file + slicing')

滤镜操作

打印所有的滤镜列表

所有的系统滤镜,从文档可以查到

https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html#//apple_ref/doc/uid/TP30001185

滤镜按照功能,被分进不同的类别

源文件 listFilters.py

# coding: utf-8
from pycoreimage.pyci import *
print(cimg.filters())
$ python src/listFilters.py 
(
    CIAccordionFoldTransition,
    CIAdditionCompositing,
    CIAffineClamp,
    CIAffineTile,
    CIAffineTransform,
    CIAreaAverage,
    CIAreaHistogram,
    CIAreaMaximum,
    CIAreaMaximumAlpha,
    CIAreaMinimum,
    CIAreaMinimumAlpha,
    CIAreaMinMaxRed,
    CIAttributedTextImageGenerator,
    CIAztecCodeGenerator,
    CIBarcodeGenerator,
    CIBarsSwipeTransition,
    CIBicubicScaleTransform,
    CIBlendWithAlphaMask,
    CIBlendWithBlueMask,
    CIBlendWithMask,
    CIBlendWithRedMask,
    CIBloom,
    CIBokehBlur,
    CIBoxBlur,
    CIBumpDistortion,
    CIBumpDistortionLinear,
    CICheckerboardGenerator,
    CICircleSplashDistortion,
    CICircularScreen,
    CICircularWrap,
    CIClamp,
    CICMYKHalftone,
    CICode128BarcodeGenerator,
    CIColorBlendMode,
    CIColorBurnBlendMode,
    CIColorClamp,
    CIColorControls,
    CIColorCrossPolynomial,
    CIColorCube,
    CIColorCubesMixedWithMask,
    CIColorCubeWithColorSpace,
    CIColorCurves,
    CIColorDodgeBlendMode,
    CIColorInvert,
    CIColorMap,
    CIColorMatrix,
    CIColorMonochrome,
    CIColorPolynomial,
    CIColorPosterize,
    CIColumnAverage,
    CIComicEffect,
    CIConstantColorGenerator,
    CIConvolution3X3,
    CIConvolution5X5,
    CIConvolution7X7,
    CIConvolution9Horizontal,
    CIConvolution9Vertical,
    CICopyMachineTransition,
    CICrop,
    CICrystallize,
    CIDarkenBlendMode,
    CIDepthBlurEffect,
    CIDepthOfField,
    CIDepthToDisparity,
    CIDifferenceBlendMode,
    CIDiscBlur,
    CIDisintegrateWithMaskTransition,
    CIDisparityToDepth,
    CIDisplacementDistortion,
    CIDissolveTransition,
    CIDivideBlendMode,
    CIDotScreen,
    CIDroste,
    CIEdgePreserveUpsampleFilter,
    CIEdges,
    CIEdgeWork,
    CIEightfoldReflectedTile,
    CIExclusionBlendMode,
    CIExposureAdjust,
    CIFalseColor,
    CIFlashTransition,
    CIFourfoldReflectedTile,
    CIFourfoldRotatedTile,
    CIFourfoldTranslatedTile,
    CIGammaAdjust,
    CIGaussianBlur,
    CIGaussianGradient,
    CIGlassDistortion,
    CIGlassLozenge,
    CIGlideReflectedTile,
    CIGloom,
    CIHardLightBlendMode,
    CIHatchedScreen,
    CIHeightFieldFromMask,
    CIHexagonalPixellate,
    CIHighlightShadowAdjust,
    CIHistogramDisplayFilter,
    CIHoleDistortion,
    CIHueAdjust,
    CIHueBlendMode,
    CIHueSaturationValueGradient,
    CIKaleidoscope,
    CILabDeltaE,
    CILanczosScaleTransform,
    CILenticularHaloGenerator,
    CILightenBlendMode,
    CILightTunnel,
    CILinearBurnBlendMode,
    CILinearDodgeBlendMode,
    CILinearGradient,
    CILinearToSRGBToneCurve,
    CILineOverlay,
    CILineScreen,
    CILuminosityBlendMode,
    CIMaskedVariableBlur,
    CIMaskToAlpha,
    CIMaximumComponent,
    CIMaximumCompositing,
    CIMedianFilter,
    CIMinimumComponent,
    CIMinimumCompositing,
    CIModTransition,
    CIMorphologyGradient,
    CIMorphologyMaximum,
    CIMorphologyMinimum,
    CIMotionBlur,
    CIMultiplyBlendMode,
    CIMultiplyCompositing,
    CINinePartStretched,
    CINinePartTiled,
    CINoiseReduction,
    CIOpTile,
    CIOverlayBlendMode,
    CIPageCurlTransition,
    CIPageCurlWithShadowTransition,
    CIParallelogramTile,
    CIPDF417BarcodeGenerator,
    CIPerspectiveCorrection,
    CIPerspectiveTile,
    CIPerspectiveTransform,
    CIPerspectiveTransformWithExtent,
    CIPhotoEffectChrome,
    CIPhotoEffectFade,
    CIPhotoEffectInstant,
    CIPhotoEffectMono,
    CIPhotoEffectNoir,
    CIPhotoEffectProcess,
    CIPhotoEffectTonal,
    CIPhotoEffectTransfer,
    CIPinchDistortion,
    CIPinLightBlendMode,
    CIPixellate,
    CIPointillize,
    CIQRCodeGenerator,
    CIRadialGradient,
    CIRandomGenerator,
    CIRippleTransition,
    CIRowAverage,
    CISaturationBlendMode,
    CIScreenBlendMode,
    CISepiaTone,
    CIShadedMaterial,
    CISharpenLuminance,
    CISixfoldReflectedTile,
    CISixfoldRotatedTile,
    CISmoothLinearGradient,
    CISoftLightBlendMode,
    CISourceAtopCompositing,
    CISourceInCompositing,
    CISourceOutCompositing,
    CISourceOverCompositing,
    CISpotColor,
    CISpotLight,
    CISRGBToneCurveToLinear,
    CIStarShineGenerator,
    CIStraightenFilter,
    CIStretchCrop,
    CIStripesGenerator,
    CISubtractBlendMode,
    CISunbeamsGenerator,
    CISwipeTransition,
    CITemperatureAndTint,
    CITextImageGenerator,
    CIThermal,
    CIToneCurve,
    CITorusLensDistortion,
    CITriangleKaleidoscope,
    CITriangleTile,
    CITwelvefoldReflectedTile,
    CITwirlDistortion,
    CIUnsharpMask,
    CIVibrance,
    CIVignette,
    CIVignetteEffect,
    CIVortexDistortion,
    CIWhitePointAdjust,
    CIXRay,
    CIZoomBlur
)

打印某个滤镜的详细信息

源文件detailFliterInfo.py

# coding: utf-8
from pycoreimage.pyci import *
print(cimg.inputs('gaussianBlur'))
print(cimg.inputs('additionCompositing'))

输出:

$ python python/PyCoreImage/src/detailFliterInfo.py
{
    "CIAttributeFilterAvailable_Mac" = "10.4";
    "CIAttributeFilterAvailable_iOS" = 6;
    CIAttributeFilterCategories =     (
        CICategoryBlur,
        CICategoryStillImage,
        CICategoryVideo,
        CICategoryBuiltIn
    );
    CIAttributeFilterDisplayName = "Gaussian Blur";
    CIAttributeFilterName = CIGaussianBlur;
    CIAttributeReferenceDocumentation = "http://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur";
    inputImage =     {
        CIAttributeClass = CIImage;
        CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
        CIAttributeDisplayName = Image;
        CIAttributeType = CIAttributeTypeImage;
    };
    inputRadius =     {
        CIAttributeClass = NSNumber;
        CIAttributeDefault = 10;
        CIAttributeDescription = "The radius determines how many pixels are used to create the blur. The larger the radius, the blurrier the result.";
        CIAttributeDisplayName = Radius;
        CIAttributeIdentity = 0;
        CIAttributeMin = 0;
        CIAttributeSliderMax = 100;
        CIAttributeSliderMin = 0;
        CIAttributeType = CIAttributeTypeScalar;
    };
}
{
    "CIAttributeFilterAvailable_Mac" = "10.4";
    "CIAttributeFilterAvailable_iOS" = 5;
    CIAttributeFilterCategories =     (
        CICategoryCompositeOperation,
        CICategoryVideo,
        CICategoryStillImage,
        CICategoryInterlaced,
        CICategoryNonSquarePixels,
        CICategoryHighDynamicRange,
        CICategoryBuiltIn
    );
    CIAttributeFilterDisplayName = Addition;
    CIAttributeFilterName = CIAdditionCompositing;
    CIAttributeReferenceDocumentation = "http://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIAdditionCompositing";
    inputBackgroundImage =     {
        CIAttributeClass = CIImage;
        CIAttributeDescription = "The image to use as a background image.";
        CIAttributeDisplayName = "Background Image";
        CIAttributeType = CIAttributeTypeImage;
    };
    inputImage =     {
        CIAttributeClass = CIImage;
        CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
        CIAttributeDisplayName = Image;
        CIAttributeType = CIAttributeTypeImage;
    };
}

滤镜的详细信息和使用 OC 打印结果相同。

使用 zoomBlur 滤镜

源文件 CIZoomBlur.py

# coding: utf-8
from pycoreimage.pyci import *

# read imag file
filepath = '/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic'
img = cimg.fromFile(filepath)

# apply zoomBlur
r1 = img.zoomBlur()
r2 = img.zoomBlur(center=[500,500],amount=10)

#show images

show([img, r1,r2], title=['src', 'r1','r2'])

# https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/#//apple_ref/doc/filter/ci/CIZoomBlur

可以看到,使用滤镜的时候,参数名称有变化。

原来的 inputCenter,inputAmout 分别变为了center,amout.

使用 mono 滤镜

源文件 CIPhotoEffectMono.py

# coding: utf-8
from pycoreimage.pyci import *

# read imag file
filepath = '/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic'
img = cimg.fromFile(filepath)

# print filter info
print(cimg.inputs('photoEffectMono'))

# apply photoEffectMono
r = img.photoEffectMono()

#show images
show([img, r], title=['src', 'r'])

使用叠加率滤镜

源文件 CILightenBlendMode.py

# coding: utf-8
from pycoreimage.pyci import *

# read imag file
filepath = '/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic'
img = cimg.fromFile(filepath)

backgourdImg = cimg.fromFile('/Users/zx/Downloads/zx.jpg')

# apply 
r1 = img.additionCompositing(backgroundImage=backgourdImg)
r2 = img.colorBlendMode(backgroundImage=backgourdImg)
r3 = img.colorBurnBlendMode(backgroundImage=backgourdImg)
r4 = img.colorDodgeBlendMode(backgroundImage=backgourdImg)
r5 = img.darkenBlendMode(backgroundImage=backgourdImg)
 # = img.DifferenceBlendMode
 # = img.DivideBlendMode
 # = img.ExclusionBlendMode
 # = img.HardLightBlendMode
 # = img.HueBlendMode
 # = img.LightenBlendMode
 # = img.LinearBurnBlendMode
 # = img.LinearDodgeBlendMode
 # = img.LuminosityBlendMode
 # = img.MaximumCompositing
 # = img.MinimumCompositing
 # = img.MultiplyBlendMode
 # = img.MultiplyCompositing
 # = img.OverlayBlendMode
 # = img.PinLightBlendMode
 # = img.SaturationBlendMode
 # = img.ScreenBlendMode
 # = img.SoftLightBlendMode
 # = img.SourceAtopCompositing
 # = img.SourceInCompositing
 # = img.SourceOutCompositing
 # = img.SourceOverCompositing
 # = img.SubtractBlendMode

#show images
show([img,r1,r2,r3,r4,r5])

参考资料

原文地址:https://www.cnblogs.com/xilifeng/p/9269066.html