我使用以下代码向图像添加文字:
+(UIImage *)addTextToImage:(UIImage *)img text:(NSString *)text1 {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// float scaleFactor = [[UIScreen mainScreen] scale];
int w = img.size.width;
int h = img.size.height;
// CGSize size = CGSizeMake(768, 768);
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
// CGContextScaleCTM(context, scaleFactor, scaleFactor);
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, "Times New Roman", 14, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0, 0, 0, 1);
//rotate text
CGContextSetTextMatrix(context, CGAffineTransformMakeRotation( -M_PI/8 ));
CGContextShowTextAtPoint(context, 70, 88, text, strlen(text));
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
UIImage* newImg = [UIImage imageWithCGImage:imageMasked];
CGImageRelease(imageMasked);
return newImg;
}
这适用于非视网膜。但是当我在Retina显示器上测试它时,图像和文本都是像素化的。我搜索了一个解决方案,遇到了像这样的stackoverflow问题:CoreGraphics for retina display
我尝试了建议的内容(你可以在代码中看到它被注释掉),但它没有帮助。我尝试按比例因子缩放坐标,我也尝试过 CGContextScaleCTM(UIGraphicsGetCurrentContext(),scale,scale);
图像保持像素化。这是我加载图像并调用addTextToImage方法的方法:
frameImg = [UIImage imageNamed:@“thumbnail_frame_stacked”]; frameImg = [Utils addTextToImage:frameImg text:text];
毋庸置疑,我有非视网膜和视网膜版本的图像。我做错了什么?