我的代码目前正在使用什么:
我从照片库中选择了JPG或PNG(使用标准的ImagePicker方法),并使用以下方法将该图像转换为NSData:
self.myImageData = UIImageJPEGRepresentation(myImage, 0.9);
Run Code Online (Sandbox Code Playgroud)
然后我使用multipart/form-data将其发布到服务器.
我现在想要为GIF做同样的事情,同时保留原始的GIF数据(以便动画GIF进入图书馆,恢复出来仍然是动画).
在didFinishPickingMediaWithInfo中,我可以使用原始GIF的URL
self.myGIFURL = [info objectForKey:UIImagePickerControllerReferenceURL].
Run Code Online (Sandbox Code Playgroud)
这是一个可能让我得到的例子:
资产库://asset/asset.GIF ID = 1000000034&EXT = GIF
以下是我现在尝试将此GIF推送到NSData的两种方法,每次myImageData显示(null).
我试过使用initWithContentsOfURL:
NSData *dataFromGIFURL = [[NSData alloc] initWithContentsOfURL: myGIFURL];
self.myImageData = dataFromGIFURL;
[dataFromGIFURL release];
Run Code Online (Sandbox Code Playgroud)
然后我尝试将NSURL转换为initWithContentsOfFile的字符串:
NSString *stringFromURL = [NSString stringWithFormat:@"%@", myGIFURL];
NSData *dataFromGIFURL = [[NSData alloc] initWithContentsOfFile: stringFromURL];
self.myImageData = dataFromGIFURL;
[dataFromGIFURL release];
Run Code Online (Sandbox Code Playgroud)
有什么建议?谢谢.
对于MKMapView:UIView
我怎么能将mkmapview的内容转换为uiimage?
虽然从mkmapview的最终目标(或主要主要目标,如果你知道我的意思)是NSData var然后我可以附加到mimeType"image/png"的电子邮件
有点抓住MKMapview在任何特定时刻展示的截图
把它放在(UIImage)mapImage上
NSData*imageData = UIImagePNGRepresentation(mapImage);
有小费吗?
提前致谢
我必须从数据库中填充表格单元格,并且图像在设备上.我要存储该图像imageDataObject,如何将其转换UIImage为NSData.请建议,我尝试了许多解决方案,但它不转换回该NSData给UIImage.
cell.textLabel.text = [[offlineImageListArray objectAtIndex:indexPath.row] imageName];
UIImage *thumbnail = [self retrieveImageFromDevice:[[offlineImageListArray objectAtIndex:indexPath.row] imageName]];
NSData* data = ??????????;
ImageData *imageDataObject = [[ImageData alloc] initWithImageId:[[offlineImageListArray objectAtIndex:indexPath.row]imageId]
imageName:[[offlineImageListArray objectAtIndex:indexPath.row] imageName] imageData:data];
[imagesArray addObject:imageDataObject];
Run Code Online (Sandbox Code Playgroud) 这是我的功能.首先println打印正确的哈希到控制台,但在下一行程序崩溃.你能帮助我吗?
func sha256(string: NSString) -> NSString {
var data : NSData! = string.dataUsingEncoding(NSUTF8StringEncoding)
var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
let res = NSData(bytes: hash, length: Int(CC_SHA256_DIGEST_LENGTH))
println(res)
let resstr = NSString(data: res, encoding: NSUTF8StringEncoding)
println(resstr)
return resstr
}
Run Code Online (Sandbox Code Playgroud) 所以我已经想出如何在swift中提取NSData但是我对设置它感到困惑:
var testBytes : [Byte] = [0x14, 0x00, 0xAB, 0x45, 0x49, 0x1F, 0xEF, 0x15,
0xA8, 0x89, 0x78, 0x0F, 0x09, 0xA9, 0x07, 0xB0,
0x01, 0x20, 0x01, 0x4E, 0x38, 0x32, 0x35, 0x56,
0x20, 0x20, 0x20, 0x00]
var msgData = NSData(bytes: testBytes, length: testBytes.count)
println("\(msgData)")
var length : Int = testBytes.count
var out: NSInteger = 0
let ptr = UnsafePointer<UInt8>(msgData.bytes)
var bytes = UnsafeBufferPointer<UInt8>(start: ptr, count: 28)
Run Code Online (Sandbox Code Playgroud)
因此,如果我想访问一个特定的字节,我可以用以下内容获取它:
let targetAddress = UInt32(bytes[2]) << 16 |
UInt32(bytes[3]) << 8 |
UInt32(bytes[4]) << 0
Run Code Online (Sandbox Code Playgroud)
现在说我想用以下内容设置一个值: …
我有一个NSData对象.我需要将其字节转换为字符串并作为JSON发送.description返回十六进制并且不可靠(根据各种SO海报).所以我正在看这样的代码:
NSUInteger len = [imageData length];
Byte *byteData = (Byte*)malloc(len);
[imageData getBytes:&byteData length:len];
Run Code Online (Sandbox Code Playgroud)
然后我如何将byteData作为JSON发送?我想发送原始字节.
码:
NSString *jsonBase64 = [imageData base64EncodedString];
NSLog(@"BASE 64 FINGERPRINT: %@", jsonBase64);
NSData *b64 = [NSData dataFromBase64String:jsonBase64];
NSLog(@"Equal: %d", [imageData isEqualToData:b64]);
NSLog(@"b64: %@", b64);
NSLog(@"original: %@", imageData);
NSString *decoded = [[NSString alloc] initWithData:b64 encoding:NSUTF8StringEncoding];
NSLog(@"decoded: %@", decoded);
Run Code Online (Sandbox Code Playgroud)
除了最后一行之外,我得到了一切的价值 - decoded.哪会告诉我原始字节没有格式化为NSUTF8encoding?
我想为以下内容增加Int价值multipartFormData:
Alamofire.upload(.POST,
url,
headers: headers,
multipartFormData: { multipartFormData in
//add some jpg image
//add other vaues:
for (key, value) in parameters {
if value is String {
multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
} else if value is Int {
let convertedValueNumber: NSNumber = NSNumber(int: value.intValue)
let data = NSKeyedArchiver.archivedDataWithRootObject(convertedValueNumber)
multipartFormData.appendBodyPart(data: data, name: key)
}
}
}, encodingCompletion: { encodingResult in
//some processing
})
Run Code Online (Sandbox Code Playgroud)
但服务器返回错误,我不发送Int值.如何Int为参数添加值?
更新4
Per Greg的建议我创建了一对图像/文本,使用100k块显示从37k图像到base64编码的输出.由于文件只有37k,所以可以说循环只迭代一次,因此没有附加任何内容.另一对使用10k块显示从相同的37k图像到base64编码的输出.由于文件是37k,循环迭代四次,并且数据被明确附加.
对这两个文件进行差异显示,在10kb块文件上有一个很大的区别,它从第214行开始,到第640行结束.
更新3
这是我的代码现在的位置.清理了一下但仍产生相同的效果:
// Read data in chunks from the original file
[originalFile seekToEndOfFile];
NSUInteger fileLength = [originalFile offsetInFile];
[originalFile seekToFileOffset:0];
NSUInteger chunkSize = 100 * 1024;
NSUInteger offset = 0;
while(offset < fileLength) {
NSData *chunk = [originalFile readDataOfLength:chunkSize];
offset += chunkSize;
// Convert the chunk to a base64 encoded string and back into NSData
NSString … 如何从NSData实例中获取base64字符串?
如果我创建一个NSImage类似于:
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
Run Code Online (Sandbox Code Playgroud)
它只有一个表示,NSCoreUIImageRep似乎是一个私人类.
我想把这个图像存档为NSData但如果我要求TIFFRepresentation我得到一个小图标,当NSImage我最初创建的真实图像似乎是矢量并且可以扩展以很好地填充我的图像视图.
我有点希望以这种方式制作的图像NSPDFImageRep可以使用.
任何想法我怎么能得到NSData(矢量版本或更大的位图版本)NSImage?
UPDATE
在Twitter上与一些人讨论,他们建议这些图像的真正来源是多分辨率icns文件(可能根本不是矢量).我无法在磁盘上找到这些位置,但有趣的是听到了这一点.
此外,他们建议我创建系统NSImage并手动将其渲染为我自己的高分辨率NSImage.我现在正在这样做,它正在满足我的需求.我的代码:
+ (NSImage *)pt_businessDefaultIcon
{
// Draws NSImageNameUser into a rendered bitmap.
// We do this because trying to create an NSData from
// [NSImage imageNamed:NSImageNameUser] directly results in a 32x32 image.
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
NSImage *renderedIcon = [[NSImage alloc] initWithSize:CGSizeMake(PTAdditionsBusinessDefaultIconSize, PTAdditionsBusinessDefaultIconSize)];
[renderedIcon lockFocus];
NSRect inRect = …Run Code Online (Sandbox Code Playgroud)