ios圖片壓縮上傳
① iOS--圖片壓縮
我們可以在不減小圖片的解析度(質量可以適當減小)的情況下,顯著減小圖片的大小
上面方法等價於下面: 壓縮圖片質量
//將圖片壓縮到指定比例
等比例壓縮
圖片的壓縮其實是倆概念,
1、是 「壓」 文件體積變小,但是像素數不變,長寬尺寸不變,那麼質量可能下降,
2、是 「縮」 文件的尺寸變小,也就是像素數減少。長寬尺寸變小,文件體積同樣會減小。
這個 UIImageJPEGRepresentation(image, 0.0),是1的功能。
這個 [sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)] 是2的功能。
所以,這倆你得結合使用來滿足需求,不然你一味的用1,導致,圖片模糊的不行,但是尺寸還是很大。
我們還可以對圖片進行部分截取
//--------------截取部分圖片到指定位置-------------------------
② iOS文件上傳
文件上傳的步驟
有時候項目需要要一次上傳多張圖片,可以將圖片壓縮成一個zip包,然後上傳這樣的方式來處理。文件壓縮和解壓工具 SSZipArchive
③ iOS 開發中的圖片壓縮
在項目中經常遇到要上傳圖片,如果直接上傳,那麼會上傳比較大的圖片,導致費流量,刷新時載入圖片時間過長,手機內存佔用率高等問題。
一、先來介紹下概念:
圖片的壓縮其實是倆概念,
1、是 「壓」 文件體積變小,但是像素數不變,長寬尺寸不變,那麼質量可能下降,
2、是 「縮」 文件的尺寸變小,也就是像素數減少。長寬尺寸變小,文件體積同樣會減小。
二、解決方法(以上傳頭像為例),先縮再壓:
2.1 矯正圖片方向(照片是有方向的,避免出現「倒立」的情況)
- (UIImage*)fixOrientation:(UIImage*)aImage {
// No-op if the orientation is already correct
if(aImage.imageOrientation==UIImageOrientationUp)
returnaImage;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransformtransform =CGAffineTransformIdentity;
switch(aImage.imageOrientation) {
caseUIImageOrientationDown:
:
transform =CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform =CGAffineTransformRotate(transform,M_PI);
break;
caseUIImageOrientationLeft:
:
transform =CGAffineTransformTranslate(transform, aImage.size.width,0);
transform =CGAffineTransformRotate(transform,M_PI_2);
break;
caseUIImageOrientationRight:
:
transform =CGAffineTransformTranslate(transform,0, aImage.size.height);
transform =CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch(aImage.imageOrientation) {
:
:
transform =CGAffineTransformTranslate(transform, aImage.size.width,0);
transform =CGAffineTransformScale(transform, -1,1);
break;
:
:
transform =CGAffineTransformTranslate(transform, aImage.size.height,0);
transform =CGAffineTransformScale(transform, -1,1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRefctx =CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch(aImage.imageOrientation) {
caseUIImageOrientationLeft:
:
caseUIImageOrientationRight:
:
CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
break;
default:
CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
break;
}
CGImageRef cgimg =CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImageimageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
2.2 拿到上面矯正過的圖片,縮小圖片尺寸,調用下面方法傳入newSize,如(200,200):
+ (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContext(newSize);
[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage =();
UIGraphicsEndImageContext();
return newImage;
}
2.3 將2.2的圖片再壓,這個方法可以重復壓
//調整大小
NSData *imageData =UIImageJPEGRepresentation(newImage,rate);
NSUIntegersizeOrigin = [image Datalength];//多少KB
NSUIntegersizeOriginKB = sizeOrigin /1024;//多少KB
2.4 上傳頭像
調用後台介面,把imageData二進制數據上傳即可
總結:對圖片壓縮處理時,在保證圖片清晰度變化不大時,減小圖片文件大小。方法2.2中的newSize 和 2.3中的rate要以實際效果來設置,我在自己項目中上傳的頭像最終尺寸是200*200像素,大小為4KB左右。
④ 手機怎麼打包圖片
安卓和iOS系統的操作方法不同,安卓可以使用手機上自帶的文件管理器完成壓縮打包發送圖片的操作;iOS系統需要先把圖片發送到電腦上,再通過電腦上的壓縮軟體壓縮打包發送圖片壓縮包。以下是詳細介紹。
1、如果您使用的是安卓手機可以直接使用文件管理器打開圖片的文件夾,將需要發送的文件多選選中後復制到一個新的文件夾。長按該文件夾點擊下方選項中的【更多】,在彈出的菜單中選擇【壓縮並發送】。
2、等待壓縮完成之後就可以在分享列表中選擇使用微信、QQ、郵箱或是藍牙等方式分享。
3、如果您使用的是蘋果的iPhone手機,需要藉助電腦上面的壓縮軟體。通過QQ或者微信將照片從手機傳輸到電腦上,另存為一個新建的文件夾路徑。
4、找到該文件夾右鍵打開菜單,選擇【添加XX.zip】,XX為您的文件夾名稱。等待壓縮成功之後,在同一個路徑就可以看到壓縮包,把壓縮包發給別人即可。
⑤ iOS微信聊天,朋友圈圖片壓縮演算法
圖片作為App中重要的一個元素,非常具有表現力,圖片既要讓用戶能看清楚,又能讓發布圖片的用戶能快速的上傳。所以開發者要對圖片進行裁切和質量壓縮。但是裁切尺寸質量壓縮比設置成多少卻很難控制好,如果設置不當會導致圖片顯示效果很差。
微信是一個很好的參照物,被大家廣為使用並接受。這個擴展就是通過發送微信朋友圈和聊天會話發送了大量圖片,對比原圖與微信壓縮後的圖片逆向推算出來的壓縮演算法。
經過大量的測試,微信的圖片壓縮質量值 ≈0.5
⑥ iOS-圖片壓縮和裁剪
項目工程裡面用到了圖片壓縮,這邊做了個筆記整理了一下。
壓縮:圖片文件的體積變小,長寬尺寸不變,質量可能下降。
裁剪:文件尺寸變小,長寬尺寸變小,文件體積大小會變小。
在iOS中圖片壓縮使用到兩個關鍵方法: UIImageJPEGRepresentation 和 UIImagePNGRepresentation 使用方式如下。
下面我們用圖片測試一下兩個方法的差異。就使用的本文上面的那張傍晚iPhone拍攝的圖片,具體參數如圖:
使用 UIImagePNGRepresentation(image) 返回的數據量大小為 1,299,138 位元組(磁碟上的1.3 MB) 。
使用 UIImageJPEGRepresentation(image, 1.0) 返回的數據量大小為 183,531 位元組(磁碟上的184 KB 。
可以看到 UIImagePNGRepresentation(UIImage \*image) 要比 UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的圖片數據量大很多。
使用 UIImageJPEGRepresentation 可以大幅度降低圖片的數據量,比如剛才拍攝的那張圖片,通過該方法壓縮之後,數據大小僅為 184 KB 。 更改壓縮系數為0.5再讀取數據時,返回的數據大小隻有 111 KB 。圖片大小壓縮了,但是清晰度並沒有像差多少,質量也沒有明顯的降低。
所以在讀取圖片數據的時候,建議優先使用 UIImageJPEGRepresentation ,根據實際業務需求,設置壓縮系數。
⑦ iOS開發圖片壓縮的兩種方式2019-01-18
工作中遇到需要將圖片壓縮之後上傳的需求。經過多方查詢資料,目前總結出來兩種方式總結一下備用。
UIImageJPEGRepresentation(image, compression)
這個方法可以將iPhone拍攝的照片壓縮到幾百Kb的極限值,到極限值之後不管compression這個參數多小,該函數返回的數據大小都不會再改變。也就是說這個方法的壓縮是有最小值的,得到的是jpg格式。
另外有一個方法UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)這個方法得到的數據會比之前那個方法得到的數據佔用空間更大。
為了達到壓縮的目的,這種方法是有損的,就是會降低圖片質量。
這種方法的到的圖片,newSize越小質量越差,但是得到的圖片佔用內存越小。設置多大的newSize自己斟酌決定。
綜合一下自己平常在開發中常用的就是,先使用第一種方法保持精度不變,compression選擇0.6或者0.7進行第一次壓縮,然後再用第二種方法進行尺寸壓縮,得到的就是我們最終想要的圖片。
⑧ iOS中圖片壓縮
1.對圖片進行壓縮,利用iOS的API提供的函數進行壓縮:
2.根據image重新繪制一張新的圖片出來:
⑨ iOS中圖片壓縮方法
在實際開發中,可能會遇到從手機相冊中選擇圖片的需求,選擇圖片這個過程是一個消耗性能的過程,取決於手機圖片的大小,如果手機像素非常高,圖片的尺寸非常大,這個時候就會變得很消耗性能;
以上兩種方法雖然都可能達到壓縮圖片的需求,但是可能會照成圖片的失真;
下面提供另一種方法:根據圖片從新繪制一張出來,不會失真,只是改變圖片大小,比如之前是5000 5000的解析度,這個時候你壓縮後可能就只有500 500,不會失真,只會改變大小,建議使用;