如何把NSString和UIImage合成一张图片保存

iOS 码拜 8年前 (2015-05-09) 658次浏览 0个评论
 

如题请大家帮助,谢谢

5分
UIImage转成NSData,再利用base64编码转成字符串
加上一个定义结构体或是类
typedef struct
{
    NSString *yourStr;
    NSString *imgBase64;
} yourStructName;

不知是不是你想要的答案?

引用 2 楼 xuanner 的回复:

UIImage转成NSData,再利用base64编码转成字符串
加上一个定义结构体或是类
typedef struct
{
  NSString *yourStr;
  NSString *imgBase64;
} yourStructName;

不知是不是你想要的答案?

非常感谢你的回答,你是把图片转成字符串了 我的意识是如何把一个定义的字符串合成到一张已有的图片上?

5分
先把image画到屏幕,再把字符串画到屏幕上,然后再保存
[self setNeedsDisplay];//用这个方法,系统会执行下面的方法
– (void) drawRect: (CGRect) rect
{
if (!self.points) return;
if (self.points.count < 2) return;

CGContextRef context = UIGraphicsGetCurrentContext();
[current set];
CGContextSelectFont (context, // 3
                         “Arial”,
                         40,
                         kCGEncodingMacRoman);
UIFont* tfont = [UIFont fontWithName:@”Arial” size:40.0];
CGContextSetCharacterSpacing (context, 10); // 4
    
    CGContextSetTextDrawingMode (context, kCGTextFillStroke); // 5
    
//    CGContextSetRGBFillColor (context, 0, 1, 0, 1.0); // 6
//    CGContextSetRGBStrokeColor (context, 0, 0, 1, 1); // 7

//    NSString *tstr = @”test”;
//    
//    
//    [tstr drawAtPoint:CGPointMake(0.0,0.0) withFont:tfont];
NSString *path  = [self pathForItemNamed:@”aa.png” inFolder:[self imageFolderPath:@”Documents”]];

    UIImage * img = [UIImage imageWithContentsOfFile:path];
[img drawInRect:CGRectMake(0.0, 0.0, 320, 480)];

    NSString*tstr1 = @”1111111111111111111111″;
    
    [tstr1 drawInRect:CGRectMake(0.0, 0.0, 320, 480) withFont:tfont];
}
然后??
保存
http://www.cocoachina.com/macdev/cocoa/2009/0611/69.html

引用 4 楼 ybh37 的回复:

先把image画到屏幕,再把字符串画到屏幕上,然后再保存
[self setNeedsDisplay];//用这个方法,系统会执行下面的方法
– (void) drawRect: (CGRect) rect
{
if (!self.points) return;
if (self.points.count < 2) return;

CGContextRef context = UI……

你的意思是用抓屏得方式来实现?对吧!

5分
不明白楼主出于什么目的而做这个的,拼是可以拼,但UIImage二进制拼上NSString,那么这个就不是图片了,而是你自定义的一种数据格式,用图片预览是看不出来图片的。
无非就是为了保存数据。。。。何必搞得那么麻烦呢。写入不方便,读取出来也不方便。
引用 6 楼 xuanner 的回复:

不明白楼主出于什么目的而做这个的,拼是可以拼,但UIImage二进制拼上NSString,那么这个就不是图片了,而是你自定义的一种数据格式,用图片预览是看不出来图片的。
无非就是为了保存数据。。。。何必搞得那么麻烦呢。写入不方便,读取出来也不方便。

需求是这样的,手机拍照然后把时间融合到图片上,在把融合了时间的图片发到服务端

明显楼主的思路开始就是错误的了,手机拍照的时间,相机类型等的数据已以在拍照时自动写入图片了,只要在服务器那边读取这张照片的属性(EXIF、TIFF信息)就可以了。至于服务器是用什么语言实现的,就要根据具体的语言去读取。

这是object c 实现的例子代码:

NSData *imageData = [NSData dataWithContentsOfFile:imagePath];CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)imageData, NULL); NSDictionary *metaData = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source,0,NULL);NSDictionary *exifData = [metaData objectForKey:@"{Exif}"];NSDictionary *tiffData = [metaData objectForKey:@"{TIFF}"];

这是我读取图片显示出来的JSON信息分别是EXIF  TIFF信息,

"photoFlow" : [
      {
        "ExposureTime" : 0.01666667,
        "MaxApertureValue" : 2.96875,
        "Flash" : 89,
        "ColorSpace" : 1,
        "ExifVersion" : [
          2,
          2
        ],
        "FocalPlaneYResolution" : 7245.283,
        "FocalPlaneResolutionUnit" : 2,
        "ShutterSpeedValue" : 5.90625,
        "FocalLength" : 7.3,
        "CompressedBitsPerPixel" : 2,
        "FNumber" : 2.8,
        "SceneCaptureType" : 0,
        "PixelYDimension" : 1,
        "ApertureValue" : 2.96875,
        "PixelXDimension" : 1,
        "CustomRendered" : 0,
        "WhiteBalance" : 0,
        "DateTimeDigitized" : "2008:08:23 22:15:01",
        "SensingMethod" : 2,
        "DateTimeOriginal" : "2008:08:23 22:15:01",
        "MeteringMode" : 5,
        "FlashPixVersion" : [
          1,
          0
        ],
        "ComponentsConfiguration" : [
          1,
          2,
          3,
          0
        ],
        "ExposureMode" : 0,
        "DigitalZoomRatio" : 1,
        "ExposureBiasValue" : 0,
        "FocalPlaneXResolution" : 7236.749
      },
      {
        "Model" : "Canon PowerShot A610",
        "_YCbCrPositioning" : 1,
        "ResolutionUnit" : 2,
        "YResolution" : 180,
        "XResolution" : 180,
        "Orientation" : 1,
        "DateTime" : "2008:08:23 22:15:01",
        "Make" : "Canon"
      }
    ],
5分
先把image画到屏幕,再把字符串画到屏幕上,然后再保存

正解

引用 8 楼 xuanner 的回复:

明显楼主的思路开始就是错误的了,手机拍照的时间,相机类型等的数据已以在拍照时自动写入图片了,只要在服务器那边读取这张照片的属性(EXIF、TIFF信息)就可以了。至于服务器是用什么语言实现的,就要根据具体的语言去读取。

这是object c 实现的例子代码:

C/C++ code
NSData *imageData = [NSData dataWithContentsOfFile:i……

我的目的是想把时间融合到照片上!

5分
佳能一直在搞这个似乎,有失真,楼主要有思想准备。
基本做法是jpeg转成中间存储格式,在Windows上可以是bitmap,然后在bitmap上用画图函数写时间,之后再转换成jpeg。

jpeg库是现成的,到网上找找官方的,是用c语言写的。

5分
LZ是想在图片上加时间水印,你理解错了。

引用 8 楼 xuanner 的回复:

明显楼主的思路开始就是错误的了,手机拍照的时间,相机类型等的数据已以在拍照时自动写入图片了,只要在服务器那边读取这张照片的属性(EXIF、TIFF信息)就可以了。至于服务器是用什么语言实现的,就要根据具体的语言去读取。

这是object c 实现的例子代码:
C/C++ code
NSData *imageData = [NSData dataWithContentsOfFile:im……

5分
引用 5 楼 zytkwlh 的回复:

引用 4 楼 ybh37 的回复:
先把image画到屏幕,再把字符串画到屏幕上,然后再保存
[self setNeedsDisplay];//用这个方法,系统会执行下面的方法
– (void) drawRect: (CGRect) rect
{
if (!self.points) return;
if (self.points.count < 2) return;

CGCon……

直接合并的算法貌似没有公开的,这个需要¥

引用 12 楼 brucenan999 的回复:

LZ是想在图片上加时间水印,你理解错了。

引用 8 楼 xuanner 的回复:

明显楼主的思路开始就是错误的了,手机拍照的时间,相机类型等的数据已以在拍照时自动写入图片了,只要在服务器那边读取这张照片的属性(EXIF、TIFF信息)就可以了。至于服务器是用什么语言实现的,就要根据具体的语言去读取。

这是object c 实现的例子代码:
C/C++ code
NSDat……

对 我就是想在图片上加时间水印,头痛真得没有思路来实现,希望大家给点建议

5分
引用 14 楼 zytkwlh 的回复:

引用 12 楼 brucenan999 的回复:
LZ是想在图片上加时间水印,你理解错了。

引用 8 楼 xuanner 的回复:

明显楼主的思路开始就是错误的了,手机拍照的时间,相机类型等的数据已以在拍照时自动写入图片了,只要在服务器那边读取这张照片的属性(EXIF、TIFF信息)就可以了。至于服务器是用什么语言实现的,就要根据具体的语言去读取。

这是object c ……

求救 彭佳乐
他应该有思路
Iphone的GDI跟Win的类似,你拿来改改


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何把NSString和UIImage合成一张图片保存
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!