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

问题描述 投票:0回答:2

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

ios objective-c xcode image masking
2个回答
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];

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都得到了很好的开发,维护或完整。

© www.soinside.com 2019 - 2024. All rights reserved.