【问题标题】:Xcode remove color from image programmatically?Xcode以编程方式从图像中删除颜色?
【发布时间】:2015-04-07 06:04:34
【问题描述】:

所以我有一个应用程序,您可以在其中移动图像到特定位置并将它们分层。它进展顺利,但我一直遇到的一个问题是我的很多图像周围都有空白(它们曾经是 jpgs),空白总是十六进制代码#FFFFFF 纯空白,所以我想知道有没有客观的方法-c 屏蔽图像中的所有十六进制代码?我会手动编辑图像,但有成千上万的图像来自第三方。有什么想法吗?

【问题讨论】:

标签: ios objective-c xcode image masking


【解决方案1】:

我发现了这个很棒的方法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];

【讨论】:

  • 太棒了!我最终不得不将函数设为私有并更改了一些东西,但这很好用!我希望我能给你更多,而不仅仅是一个赞成票和最佳答案!
  • @CalvinMoss 很高兴我能帮上忙!
  • 要支持视网膜或图像比例,请将UIGraphicsBeginImageContext(image.size);替换为UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
  • 我需要这个代码的 Swift 版本。我在哪里可以找到它?
【解决方案2】:

您可以使用 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 接口。它包含指向特定网络资源的链接:

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

【讨论】:

  • 嗨,Kurt Pfeifle,我正在使用 Objective c 的魔法棒之类的应用程序我无法实现或使用这些 api,你能帮忙吗?你能给一个示例应用程序。这对保存很有用我的时间。
猜你喜欢
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2011-02-06
  • 2017-01-24
  • 2023-03-31
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
相关资源
最近更新 更多