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

时间:2015-02-07 00:10:11

标签: ios objective-c xcode image masking

所以我有一个应用程序,你可以在某些位置移动图像并将它们分层。它很顺利,但我遇到的一个问题是我的很多图像周围都有白色空间(它们用的是jpgs),空格总是十六进制#FFFFFF纯空格,所以我想知道是否有一种方法在客观-c掩盖图像中的所有十六进制代码?我会手动编辑图像,但有来自第三方的成千上万。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我找到了你可以放在当前.h文件中的这个很棒的方法here

+(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];

答案 1 :(得分:0)

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

在ImageMagick 命令行 上,它就像以下一样简单:

convert input.jpg -trim +repage output.png

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

如果您的外延像素不使用完全相同的颜色,则可以使用-fuzz X%添加“模糊因子”。这将删除颜色距离为X%的所有像素:

convert input.tiff -trim -fuzz 5% +repage output.gif
convert input.png  -trim -fuzz 9% +repage output.png

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

通常,您可以通过ImageMagick命令行实现,使用API​​时也可以在自己的程序中实现。

这是一个包含所有当前可用API接口的列表。它包含指向特定Web资源的链接:

警告: 并非所有这些API都得到了很好的开发,维护或完整。