gpt4 book ai didi

ios - 使用 ImageMagick 的 C API(在 iPhone 上?)转换为单色?

转载 作者:可可西里 更新时间:2023-11-01 03:31:18 25 4
gpt4 key购买 nike

我正在使用 this post 中引用的代码,但想切换到基于 ImageMagick C-API 的解决方案,因为我想在单个图像处理库上进行标准化,并且需要 IM 来完成其他一些任务。

我可以找到大量使用 convert 命令行工具的示例,但没有关于如何在代码中进行单色转换的示例。

有没有示例代码?

最佳答案

可以实现单色转换,说明here , 与 MagickQuantizeImage功能。我不太熟悉抖动图像,但示例可能如下所示。

#include <wand/MagickWand.h>

int main(int argc, char **argv)
{
const size_t number_colors = 2;
const size_t treedepth = 1;
MagickWandGenesis();
MagickWand *wand = NULL;
wand = NewMagickWand();
MagickReadImage(wand,"source.png");
MagickQuantizeImage(
wand, // MagickWand
number_colors, // Target number colors
GRAYColorspace, // Colorspace
treedepth, // Optimal depth
MagickTrue, // Dither
MagickFalse // Quantization error
);
MagickWriteImage(wand,"out.png");
if(wand)wand = DestroyMagickWand(wand);
MagickWandTerminus();
return 0;
}

这有时会给您带来相当有 Blob 的图像。

Monochrome with dither

调整深度、颜色数和/或禁用抖动可能会使您的结果更接近您对所提供示例的预期。

MagickQuantizeImage(
wand, // MagickWand
number_colors, // Target number colors
GRAYColorspace, // Colorspace
treedepth, // Optimal depth
MagickFalse, // No-dither
MagickFalse // Quantization error
);

像这样... Monochrome without dither

适用于 iOS

将示例代码移植到 iOS 并不需要太多努力。 NextStep/Objective-c 方法与 MagickWand 库兼容。下面的示例使用一个临时文件来存储单色图像,但我确信有更好的方法将 Magick 图像数据直接传递给 UImage 对象。

// MyViewController.h
#import <UIKit/UIKit.h>
#import <wand/MagickWand.h>

@interface MyViewController : UIViewController

@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@property (retain, nonatomic) MagickWand *wand;

@end

// MyViewController.m
#import "MyViewController.h"

@implementation MyViewController

- (void)viewDidLoad
{
[super viewDidLoad];
MagickWandGenesis();
self.wand = NewMagickWand();
[self drawMonochromeImage:@"logo:"];
}

-(void)drawMonochromeImage:(NSString *)filePath
{
// Create temporary file
NSString *tempFilePath = [NSTemporaryDirectory()
stringByAppendingPathComponent:@"logo.jpg"];

// Read given image with C-string
MagickReadImage(self.wand,
[filePath cStringUsingEncoding:NSASCIIStringEncoding]
);

// Monochrome image
MagickQuantizeImage(self.wand,2,GRAYColorspace,1,MagickFalse,MagickFalse);

// Write to temporary file
MagickWriteImage(self.wand,
[tempFilePath cStringUsingEncoding:NSASCIIStringEncoding]
);

// Load UIImage from temporary file
UIImage *imgObj = [UIImage imageWithContentsOfFile:tempFilePath];

// Display on device
[self.imageView setImage:imgObj];
[self.imageView setContentMode:UIViewContentModeScaleAspectFit];
}
-(void)viewDidUnload
{
// Clean-up
if (self.wand)
self.wand = DestroyMagickWand(self.wand);
MagickWandTerminus();
}

@end

iOS Simulator

关于ios - 使用 ImageMagick 的 C API(在 iPhone 上?)转换为单色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18267432/

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