Xcode 以编程方式从图像中删除颜色?

Xcode remove color from image programmatically?

所以我有一个应用程序,你可以在特定位置移动图像并将它们分层。它进展顺利,但我 运行 一直关注的一个问题是我的很多图像周围都有空白(它们以前是 jpg),空白始终是十六进制代码 #FFFFFF 纯空白,所以我想知道是否存在objective-c 中的一种方法来屏蔽图像中的所有十六进制代码?我会手动编辑图像,但第三方有成千上万的图像。有什么想法吗?

我发现了这个很棒的方法 here,您可以将其放入当前的 .h 文件中:

+(UIImage *)changeWhiteColorTransparent: (UIImage *)image
{
    CGImageRef rawImageRef=image.CGImage;

    const float colorMasking[6] = {222, 255, 222, 255, 222, 255};

    UIGraphicsBeginImageContext(image.size);
    CGImageRef maskedImageRef=CGImageCreateWithMaskingColors(rawImageRef, colorMasking);
    {
        //if in iphone
        CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, image.size.height);
        CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0); 
    }

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height), maskedImageRef);
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
    CGImageRelease(maskedImageRef);
    UIGraphicsEndImageContext();    
    return result;
}

所以只需像这样将您的图像传递给此方法:

UIImage *newImage = [self changeWhiteColorTransparent: yourOldImage];

您可以使用 ImageMagick 的 API 从图像边缘移除相同颜色 space。

在 ImageMagick 命令行 上,它很简单:

convert input.jpg -trim +repage output.png

-trim 操作将自动删除像素行和列,直到它遇到不再与最外面的颜色相同的像素 rows/columns。

如果您的输出像素没有使用完全相同的颜色,您可以添加 'fuzz factor' 和 -fuzz X%。这将删除 X%:

颜色距离内的所有像素
convert input.tiff -trim -fuzz 5% +repage output.gif
convert input.png  -trim -fuzz 9% +repage output.png

(如您所见,同一个命令可以自动检测请求的输入和输出文件格式,并在需要时在它们之间进行转换。)

通常你可以通过ImageMagick命令行实现的,你在使用API.

时也可以在你自己的程序中实现

这是一个列表,其中包含所有当前可用的 API 接口。它包含特定网络资源的链接:

注意:并非所有这些 API 都同样得到很好的开发、维护或完善。