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