首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在上传到服务器之前,如何在iOS上压缩图片/调整图片大小?

在上传到服务器之前,如何在iOS上压缩图片/调整图片大小?
EN

Stack Overflow用户
提问于 2010-12-09 11:13:17
回答 13查看 97.9K关注 0票数 75

我目前正在使用iOS上的Imgur上传一张图片到服务器,代码如下:

代码语言:javascript
复制
NSData* imageData = UIImagePNGRepresentation(image);
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* fullPathToFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"SBTempImage.png"];
[imageData writeToFile:fullPathToFile atomically:NO];

[uploadRequest setFile:fullPathToFile forKey:@"image"];

当在模拟器中运行并从模拟器的图片库上传文件时,代码工作得很好,因为我使用的是快速以太网连接。但是,当选择使用iPhone拍摄的图像时,iPhone上的相同代码会超时。所以,我试着从网上保存了一张小图片,并尝试上传,效果很好。

这让我相信iPhone拍摄的大图在速度有点慢的3G网络上超时了。有没有办法在发送之前从iPhone中压缩/调整图像的大小?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-12-09 11:26:11

您应该能够通过执行以下操作来制作较小的图像

代码语言:javascript
复制
UIImage *small = [UIImage imageWithCGImage:original.CGImage scale:0.25 orientation:original.imageOrientation];

(对于四分之一大小的图像),然后将较小的图像转换为PNG或您需要的任何格式。

票数 -36
EN

Stack Overflow用户

发布于 2010-12-17 17:46:02

此代码段将调整图像的大小:

代码语言:javascript
复制
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

变量newSize是一个CGSize,可以这样定义:

代码语言:javascript
复制
CGSize newSize = CGSizeMake(100.0f, 100.0f);
票数 202
EN

Stack Overflow用户

发布于 2013-12-27 05:23:14

一个独立的解决方案:

代码语言:javascript
复制
- (UIImage *)compressForUpload:(UIImage *)original scale:(CGFloat)scale
{
    // Calculate new size given scale factor.
    CGSize originalSize = original.size;
    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);

    // Scale the original image to match the new size.
    UIGraphicsBeginImageContext(newSize);
    [original drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *compressedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return compressedImage;
}

感谢@Tuan Nguyen。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4394491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档