objective-c如何在图像 iOS 上写文本?

发布时间: 2016/10/2 3:05:09
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想在我的应用程序在图像上添加文本。我已经做到使用计算器中的一个职位。它是类似于以下内容。

+(UIImage *)addText:(UIImage *)img text:(NSString *)text1{
    int w = img.size.width;
    int h = img.size.height;
    //lon = h - lon;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);

    CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);

    char* text  = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];// "05/05/09";
    CGContextSelectFont(context, "Arial", 18, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode(context, kCGTextFill);
    CGContextSetRGBFillColor(context, 255, 255, 255, 1);


    //rotate text
    CGContextSetTextMatrix(context, CGAffineTransformMakeRotation( -M_PI/4 ));

    CGContextShowTextAtPoint(context, 4, 52, text, strlen(text));


    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    return [UIImage imageWithCGImage:imageMasked];
}

当我在写文本使用此代码时,像下面,更改原始图像颜色

原始图像

enter image description here

与文本输出

enter image description here

任何人都可以解释为什么是这种情况发生。以及如何修复这??

在此先感谢!!

解决方法 1:

编辑︰ 这只能运行在主线程上 !所以它也是很多无用。

+(UIImage *)imageFromView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

这里是一个新使用可以在任何线程使用的核心图形

+ (UIImage *)imageFromView:(UIView *)view
{
    size_t width = view.bounds.size.width*2;
    size_t height = view.bounds.size.height*2;

    unsigned char *imageBuffer = (unsigned char *)malloc(width*height*8);
    CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef imageContext = CGBitmapContextCreate(imageBuffer, width, height, 8, width*4, colourSpace,kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Big);

    CGColorSpaceRelease(colourSpace);

    CGContextTranslateCTM(imageContext, 0.0, height);
    CGContextScaleCTM(imageContext, 2.0, -2.0);

    [view.layer renderInContext:imageContext];

    CGImageRef outputImage = CGBitmapContextCreateImage(imageContext);
    UIImage *image = [[UIImage alloc] initWithCGImage:outputImage];

    CGImageRelease(outputImage);
    CGContextRelease(imageContext);
    free(imageBuffer);

    return image;
}
赞助商