gpt4 book ai didi

ios - UIImage-更改颜色深度-量化

转载 作者:行者123 更新时间:2023-12-01 16:36:30 33 4
gpt4 key购买 nike

我需要降低UIImage的颜色深度,但是我不知道该怎么做。结果应与在Photoshop中应用索引颜色相同。

我的目标是要具有较低的色深(32色或更低)。也许这是我的错,但我没有找到解决方法。令人惊讶的是,没有CoreImage过滤器。

编辑

给你一个提示。

原始图片

所需结果

编辑2

好的,我知道该过程称为量化(或类似的:-)。我发现了非常好的源代码pngnq on sourceforge。虽然不错,但在旧版iPhone设备上特别慢。但这至少会使您的代码变小。

我发现ImageMagick是另一个选择。我修改了答案,因为我设法使代码更短一些。

- (UIImage *) convertImageToIndexed:(UIImage *)image noOfColors:(int)noOfColors withoutTransformation:(BOOL) noTransformation{
UIImage * result;
@autoreleasepool {
MagickWandGenesis();
MagickWand * magick_wand = NewMagickWand();
NSData * dataObject = UIImagePNGRepresentation(image);
MagickBooleanType status;
status = MagickReadImageBlob(magick_wand, [dataObject bytes], [dataObject length]);
if (status == MagickFalse) {
NSLog(@"OOOOPS");
return image;
}

status = MagickQuantizeImage(magick_wand, noOfColors, MagickGetImageColorspace(magick_wand) , 0, NO, NO);
if (status == MagickFalse) {
NSLog(@"OOOPS");
return image;
}

size_t my_size;
unsigned char * my_image = MagickGetImageBlob(magick_wand, &my_size);
NSData * data = [[NSData alloc] initWithBytes:my_image length:my_size];
free(my_image);
magick_wand = DestroyMagickWand(magick_wand);
MagickWandTerminus();
UIImage * result = [[UIImage alloc] initWithData:data];
return result;
}

}

最佳答案

我最终使用了imagemagick魔杖库。两者都不使用imagemagick也不明显。我不知道是否有更好的编码方式,因为我既不是图像专家也不是编码英雄。

这是我使用的代码:

- (UIImage *) convertImageToIndexed:(UIImage *)image noOfColors:(int)noOfColors withoutTransformation:(BOOL) noTransformation {
UIImage * result;
@autoreleasepool {
MagickWandGenesis();
MagickWand * magick_wand = NewMagickWand();
NSData * dataObject = UIImagePNGRepresentation(image);
MagickBooleanType status;
status = MagickReadImageBlob(magick_wand, [dataObject bytes], [dataObject length]);
if (status == MagickFalse) {
NSLog(@"OOOOPS");
return image;
}

status = MagickQuantizeImage(magick_wand, noOfColors, MagickGetImageColorspace(magick_wand) , 0, NO, NO);
if (status == MagickFalse) {
NSLog(@"OOOPS");
return image;
}

size_t my_size;
unsigned char * my_image = MagickGetImageBlob(magick_wand, &my_size);
NSData * data = [[NSData alloc] initWithBytes:my_image length:my_size];
free(my_image);
magick_wand = DestroyMagickWand(magick_wand);
MagickWandTerminus();
UIImage * result = [[UIImage alloc] initWithData:data];
return result;
}
}

关于ios - UIImage-更改颜色深度-量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767717/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com