欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ios開發(fā)圖片壓縮,Ios圖片壓縮

iOS 圖片顯示中遇到的壓縮與裁剪問題

我們假設(shè)要在截圖中的舉行圖片展示區(qū)顯示圖片,由于原圖片的寬高比例與圖片顯示窗口的寬高比例不一定相同,所以,直接將圖片扔進(jìn)去會改變圖片的寬高比例,展示效果不好。

三河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

這時你可能想到設(shè)置UIImageView的屬性 _imageView.contentMode = UIViewContentModeCenter;? 設(shè)置該屬性后,我們會發(fā)現(xiàn)圖片的寬高比例確實正確了,但是窗口中只顯示了圖片的一部分,這說明圖片整體尺寸沒有壓縮,按照原圖進(jìn)行顯示了。怎樣才能達(dá)到既縮小圖片又不改變原來的寬高比例呢?

方法一:將圖片按照原來的寬高比例壓縮到與窗口合適的大小,然后在設(shè)置了_imageView.contentMode = UIViewContentModeCenter;? 這個屬性的UIImageView中展示壓縮后的圖片。

//壓縮圖片

- (UIImage *)image:(UIImage*)image scaledToSize:(CGSize)newSize

{

// 創(chuàng)建一個圖形上下文形象

UIGraphicsBeginImageContext(newSize);

// 告訴舊圖片畫在這個新的環(huán)境,所需的

// 新的尺寸

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

// 新形象從上下文

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

// 結(jié)束上下文

UIGraphicsEndImageContext();

// 返回新形象

return newImage;

}

上面方法的參數(shù)newSize是和圖片顯示窗口差不多大的,結(jié)果出現(xiàn)了原圖清晰,但壓縮后圖片不清晰的情況。

方法二:按照窗口寬高比例,將原圖橫向或者縱向裁剪掉多余的部分,然后不設(shè)置UIImageView的contentMode屬性,將裁剪后的圖片送進(jìn)去,使其自動適應(yīng)窗口。

//裁剪圖片

- (UIImage *)cutImage:(UIImage*)image

{

//壓縮圖片

CGSize newSize;

CGImageRef imageRef = nil;

if ((image.size.width / image.size.height) (_headerView.bgImgView.size.width / _headerView.bgImgView.size.height)) {

newSize.width = image.size.width;

newSize.height = image.size.width * _headerView.bgImgView.size.height / _headerView.bgImgView.size.width;

imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, fabs(image.size.height - newSize.height) / 2, newSize.width, newSize.height));

} else {

newSize.height = image.size.height;

newSize.width = image.size.height * _headerView.bgImgView.size.width / _headerView.bgImgView.size.height;

imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(fabs(image.size.width - newSize.width) / 2, 0, newSize.width, newSize.height));

}

return [UIImage imageWithCGImage:imageRef];

}

結(jié)果表明方法二效果更好。

iOS 開發(fā)中的圖片壓縮

在項目中經(jīng)常遇到要上傳圖片,如果直接上傳,那么會上傳比較大的圖片,導(dǎo)致費流量,刷新時加載圖片時間過長,手機(jī)內(nèi)存占用率高等問題。

一、先來介紹下概念:

圖片的壓縮其實是倆概念,

1、是 “壓” 文件體積變小,但是像素數(shù)不變,長寬尺寸不變,那么質(zhì)量可能下降,

2、是 “縮” 文件的尺寸變小,也就是像素數(shù)減少。長寬尺寸變小,文件體積同樣會減小。

二、解決方法(以上傳頭像為例),先縮再壓:

2.1 矯正圖片方向(照片是有方向的,避免出現(xiàn)“倒立”的情況)

- (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:

caseUIImageOrientationDownMirrored:

transform =CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);

transform =CGAffineTransformRotate(transform,M_PI);

break;

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

transform =CGAffineTransformTranslate(transform, aImage.size.width,0);

transform =CGAffineTransformRotate(transform,M_PI_2);

break;

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

transform =CGAffineTransformTranslate(transform,0, aImage.size.height);

transform =CGAffineTransformRotate(transform, -M_PI_2);

break;

default:

break;

}

switch(aImage.imageOrientation) {

caseUIImageOrientationUpMirrored:

caseUIImageOrientationDownMirrored:

transform =CGAffineTransformTranslate(transform, aImage.size.width,0);

transform =CGAffineTransformScale(transform, -1,1);

break;

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRightMirrored:

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:

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

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 拿到上面矯正過的圖片,縮小圖片尺寸,調(diào)用下面方法傳入newSize,如(200,200):

+ (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize

{

UIGraphicsBeginImageContext(newSize);

[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage* newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

2.3 將2.2的圖片再壓,這個方法可以重復(fù)壓

//調(diào)整大小

NSData *imageData =UIImageJPEGRepresentation(newImage,rate);

NSUIntegersizeOrigin = [image Datalength];//多少KB

NSUIntegersizeOriginKB = sizeOrigin /1024;//多少KB

2.4 上傳頭像

調(diào)用后臺接口,把imageData二進(jìn)制數(shù)據(jù)上傳即可

總結(jié):對圖片壓縮處理時,在保證圖片清晰度變化不大時,減小圖片文件大小。方法2.2中的newSize 和 2.3中的rate要以實際效果來設(shè)置,我在自己項目中上傳的頭像最終尺寸是200*200像素,大小為4KB左右。

iOS開發(fā)圖片壓縮的兩種方式2019-01-18

工作中遇到需要將圖片壓縮之后上傳的需求。經(jīng)過多方查詢資料,目前總結(jié)出來兩種方式總結(jié)一下備用。

UIImageJPEGRepresentation(image, compression)

這個方法可以將iPhone拍攝的照片壓縮到幾百Kb的極限值,到極限值之后不管compression這個參數(shù)多小,該函數(shù)返回的數(shù)據(jù)大小都不會再改變。也就是說這個方法的壓縮是有最小值的,得到的是jpg格式。

另外有一個方法UIImagePNGRepresentation(#UIImage * _Nonnull image#)這個方法得到的數(shù)據(jù)會比之前那個方法得到的數(shù)據(jù)占用空間更大。

為了達(dá)到壓縮的目的,這種方法是有損的,就是會降低圖片質(zhì)量。

這種方法的到的圖片,newSize越小質(zhì)量越差,但是得到的圖片占用內(nèi)存越小。設(shè)置多大的newSize自己斟酌決定。

綜合一下自己平常在開發(fā)中常用的就是,先使用第一種方法保持精度不變,compression選擇0.6或者0.7進(jìn)行第一次壓縮,然后再用第二種方法進(jìn)行尺寸壓縮,得到的就是我們最終想要的圖片。

當(dāng)前題目:ios開發(fā)圖片壓縮,Ios圖片壓縮
當(dāng)前鏈接:http://chinadenli.net/article4/dsidiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版ChatGPT電子商務(wù)網(wǎng)站營銷外貿(mào)網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)