【问题标题】:iphone : compress image in a UIImageView so that it can be uploaded to serveriphone : 压缩 UIImageView 中的图像,以便可以将其上传到服务器
【发布时间】:2011-05-05 19:05:44
【问题描述】:

嘿嘿 我有一种情况,我正在从相机中挑选图像并尝试将其上传到服务器图像大小为 1.6 MB

如何压缩这张图片上传到服务器?

-(UIImage*)resizedImage:(UIImage*)inImage  inRect:(CGRect)thumbRect { 

CGImageRef          imageRef = [inImage CGImage];
CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);


if (alphaInfo == kCGImageAlphaNone)
    alphaInfo = kCGImageAlphaNoneSkipLast;

// Build a bitmap context that's the size of the thumbRect
CGFloat bytesPerRow;

if( thumbRect.size.width > thumbRect.size.height ) {
    bytesPerRow = 4 * thumbRect.size.width;
} else {
    bytesPerRow = 4 * thumbRect.size.height;
}

CGContextRef bitmap = CGBitmapContextCreate(    
                                            NULL,
                                            thumbRect.size.width,       // width
                                            thumbRect.size.height,      // height
                                            8, //CGImageGetBitsPerComponent(imageRef),  // really needs to always be 8
                                            bytesPerRow, //4 * thumbRect.size.width,    // rowbytes
                                            CGImageGetColorSpace(imageRef),
                                            alphaInfo
                                            );

// Draw into the context, this scales the image
CGContextDrawImage(bitmap, thumbRect, imageRef);

// Get an image from the context and a UIImage
CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
UIImage*    result = [UIImage imageWithCGImage:ref];

CGContextRelease(bitmap);   // ok if NULL
CGImageRelease(ref);

return result;
}


- (void)uploadImage {
    /*
     turning the image into a NSData object
     getting the image back out of the UIImageView
     setting the quality to 90
     */
    [activityIndicator startAnimating];
    UIImage *compressedImge=[UIImage imageWithCGImage:itemImageView.image.CGImage   scale:0.15 orientation:UIImageOrientationUp];

    CGRect sz = CGRectMake(0.0f, 0.0f, 69.0f, 69.0f); 
    UIImage *smallImage = [self resizedImage:compressedImge inRect:sz];

    NSData *imageData = UIImageJPEGRepresentation(smallImage, 0.15);
    // setting up the URL to post to
    NSString *urlString = @"http://example.co/imageuploader.php";

    // setting up the request object now
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    /*
     add some header info now
     we always need a boundary when we post a file
     also we need to set the content type

     You might want to generate a random boundary.. this is just the same 
     as my output from wireshark on a valid html post
     */
    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    /*
     now lets create the body of the post
     */
    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];    
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile%@.jpeg\"\r\n",self.fileID] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the reqeust
    [request setHTTPBody:body];
    //[request did];

    // now lets make the connection to the web
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    NSLog(returnString);
}

【问题讨论】:

  • 是的,已经在那里压缩了:)

标签: iphone objective-c image-processing upload camera


【解决方案1】:

看到这个问题:What's the easiest way to resize/optimize an image size with the iPhone SDK? 几个月前我有同样的问题,这可以让你将实际图像数据调整为你想要的任何分辨率。

【讨论】:

    【解决方案2】:

    您已经使用UIImageJPEGRepresentation(smallImage, 0.15); 对其进行了大量压缩。

    【讨论】:

    • 我尝试了从 1.0 到 0.05 的所有内容,图像的大小和质量相同,而且是几年后的事了。
    猜你喜欢
    • 2018-03-29
    • 2014-02-13
    • 2017-06-15
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多