gpt4 book ai didi

ios - 解码为 png 时的 Base64 字符串被 Objective-C 截断

转载 作者:行者123 更新时间:2023-12-02 02:12:42 24 4
gpt4 key购买 nike

我正在使用此代码将从 URL 检索到的图像转换为 Base 64。

NSURL* imageUrl = [NSURL URLWithString:url];
NSData* urlData = [NSData dataWithContentsOfURL:imageUrl];
UIImage* uiImage = [UIImage imageWithData: urlData];
NSData* imageData = UIImagePNGRepresentation(uiImage);
NSData* base64 = [imageData base64EncodedDataWithOptions:0];
return [NSString stringWithUTF8String:[base64 bytes]];

图片网址:https://api.qrserver.com/v1/create-qr-code/?data=somedata&size=220x220&margin=0

生成的base64图像。

iVBORw0KGgoAAAANSUhEUgAAANwAAADcCAMAAAAshD+zAAAABlBMVEX///8AAABVwtN+AAAAHGlET1QAAAACAAAAAAAAAG4AAAAoAAAAbgAAAG4AAASMOw2BmAAABFhJREFUeAHsmdFq5VYQBO3//+lADqgKUZcjpNU6xLNP5e7puVLPTWI2X99/6s9X/WF5uV/Y3/gSH6L3P1vF04lYKRHEnpdTF5dwLnetJr5tEEk0EfZ8LdXFJZyv5bWa9HU7kOQhGbDna6kuLuFv+Vr6+3KVVSCRFLHVp0RwF2cyyXE4Rzci6f6HJuOENrZ25mSKbP/e1Zh5RG861BQP92v3kbu4NhU6DtfkTiOtllPUJnyJILZ2Yu/IcXiXKp+0HiRFpfElgtjaib0jx+FdqnzSepAUlcaXCGJrJ/aOHId3qfJJ60FSVBpfIoitndg7chzepconrQdJUWl8iSC2dmLvyHF4lyqftB4kRaXxJYLY2om9I8fhXap80nqQFJXGlwhiayf2jhyHSaE15SSiiLzEDZLRy0lMZKfs/C+q/MTehAoRR9sRmXm51QWNuRs4fWxRTiKKCEncIJm53OqCwtwNnD62KCcRRYQkbpDMXG51QWHuBk4fW5STiCJCEjdIZi63uqAwdwOnjy3KSUQRIYkbJDOXW11QmLuB08cW5eRGxM5fitL+L14ua8inlwhmXGJixxlNH1uUkxsRey63qqQRVZuYk1ljxiX2pkPNycO991d72pnIetnzcirjX+yaDlXjh2bAt3ow9vzbcnVxVKOvYv91urpL7E2HqsyhGfCtHow9l1tdHNW8fTk+SKR7JDIqO0X5YE7qRdMnLspJxCTFEwnJTlE+mJPzchS0qGtCLTrvOP9MRk6K8sGcnMtR0KKuCbXovOP8Mxk5KcoHc3IuR0GLuibUovOO889k5KQoH8zJuRwFLeqaUIvOO84/k5GTonwwJ3/f5ahhR1T3+Jfc46Ny5+FuwXF4G4sB0vNyqwtK2nXD5HXyTvh6nknSc7n

我发现图像只减半了,因为我使用这个工具进行了检查。

http://codebeautify.org/base64-to-image-converter

我是否可以生成包含整个图像的 base64image 字符串?

最佳答案

就其被切断的原因而言,我怀疑您正在调试器中查看 base64 字符串,这将截断它。实际上 NSLog 字符串,您会发现它比您在调试器中看到的要长。

其他一些不相关的观察结果:

  1. 您不应将 stringWithUTF8String[base64 bytes] 一起使用,因为 NSData 不会以 null 终止。如果您确实需要将其转换为字符串,则可以使用 initWithData 而不是 stringWithUTF8String:

    return [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
  2. 正如其他人所指出的,您可以完全绕过 base64NSData 的创建,并直接创建字符串:

    return [imageData base64EncodedStringWithOptions:0];
  3. 我根本不知道为什么要从服务器获取 NSData 并通过 UIImage 来回传输它。理论上,您可以直接对来自服务器的数据进行编码:

    NSURL* imageUrl = [NSURL URLWithString:url];
    NSData* urlData = [NSData dataWithContentsOfURL:imageUrl];
    return [urlData base64EncodedStringWithOptions:0];

    服务器已返回 PNG 表示的 NSData。您根本不需要执行 UIImageUIImagePNGRepresentation 之类的事情。您实际上生成的 PNG 比服务器返回给您的要大得多。

  4. 我建议不要使用dataWithContentsOfURL,因为这是同步网络调用。您可能应该使用 NSURLSession 并将其更改为异步方法。

关于ios - 解码为 png 时的 Base64 字符串被 Objective-C 截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41821456/

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