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 接口。它包含特定网络资源的链接:
- G2F (艾达),
- MagickCore (C),
- MagickWand (C),
- ChMagick (中国),
- ImageMagickObject (COM+),
- Magick++ (C++),
- JMagick (Java),
- L-Magick (Lisp),
- Lua (Lua),
- NMagick (Neko/Haxe),
- Magick.NET (.NET),
- PascalMagick(帕斯卡),
- PerlMagick (Perl),
- MagickWand for PHP (PHP),
- IMagick (PHP),
- PythonMagick (Python),
- RMagick (Ruby),
- TclMagick (Tcl/TK).
注意:并非所有这些 API 都同样得到很好的开发、维护或完善。
所以我有一个应用程序,你可以在特定位置移动图像并将它们分层。它进展顺利,但我 运行 一直关注的一个问题是我的很多图像周围都有空白(它们以前是 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 接口。它包含特定网络资源的链接:
- G2F (艾达),
- MagickCore (C),
- MagickWand (C),
- ChMagick (中国),
- ImageMagickObject (COM+),
- Magick++ (C++),
- JMagick (Java),
- L-Magick (Lisp),
- Lua (Lua),
- NMagick (Neko/Haxe),
- Magick.NET (.NET),
- PascalMagick(帕斯卡),
- PerlMagick (Perl),
- MagickWand for PHP (PHP),
- IMagick (PHP),
- PythonMagick (Python),
- RMagick (Ruby),
- TclMagick (Tcl/TK).
注意:并非所有这些 API 都同样得到很好的开发、维护或完善。