1. 程式人生 > >iOS開發之UIImage等比縮放

iOS開發之UIImage等比縮放

評論功能真不錯

評論開通後,果然有很多人吐槽。謝謝大家的支援和關愛,如果有做的不到的地方,還請海涵。畢竟我一個人的力量是有限的,我會盡自己最大的努力大家準備一些乾貨。

有些內容可能都是比較基礎的,記住:不積跬步無以至千里,不積小流無以成江海。我想這個道理大家都懂,在為大家準備文章的過程中,對我來說也是一次學習成長。

大家可以繼續吐槽!微信的評論就是一個溝通的渠道,也是一篇文章的延續。你也可以在評論中寫一些你對iOS開發的見解,說不定就會對他人有幫助。

很高興,已經有好幾位iOS開發的朋友答應以後會寫文章投稿給我。在這裡,我再強調一下:如果你有好的技術文章一定要投稿給我噢!投稿郵箱:

[email protected]

前面講了擷取UIImage指定大小區域,很方便的擷取UIImage。今天要和大家分享的是UIImage的縮放。

兩種縮放:

  1. 縮放到指定大小,也就是指定的size.
  2. 等比縮放。

縮放到指定大小

- (UIImage*)imageCompressWithSimple:(UIImage*)image scaledToSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0,0,size.width,size.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

等比縮放

通過縮放係數

- (UIImage*)imageCompressWithSimple:(UIImage*)image scale:(float)scale
{
    CGSize size = image.size;
    CGFloat width = size.width;
    CGFloat height = size.height;
    CGFloat scaledWidth = width * scale;
    CGFloat scaledHeight = height * scale;
    UIGraphicsBeginImageContext(size); // this will crop
    [image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];
    UIImage* newImage= UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

scale是縮放係數 。

通過計算得到縮放係數

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{

    UIImage *sourceImage = [UIImage imageNamed:@"test.jpg"];
    UIImage *newImage = nil;
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    if (CGSizeEqualToSize(imageSize, targetSize) == NO)
    {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;
        if (widthFactor > heightFactor)
            scaleFactor = widthFactor; // scale to fit height
        else
            scaleFactor = heightFactor; // scale to fit width

        scaledWidth= width * scaleFactor;
        scaledHeight = height * scaleFactor;
        // center the image
        if (widthFactor > heightFactor)
        {
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
        }
        else if (widthFactor < heightFactor)
        {
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
        }
    }

    UIGraphicsBeginImageContext(targetSize); // this will crop
    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width= scaledWidth;
    thumbnailRect.size.height = scaledHeight;
    [sourceImage drawInRect:thumbnailRect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();

    if(newImage == nil)
        NSLog(@"could not scale image");
    //pop the context to get back to the default
    UIGraphicsEndImageContext();

    return newImage;

}

很久之前寫了一篇文章解決MWPhotoBrowser中的SDWebImage載入大圖導致的記憶體警告問題。這個我記得當時從伺服器拿到的照片大概有10幾M的樣子,加載出來會導致記憶體警告。所以我當時通過修改SDWebImage原始碼,就是把下載下來的照片進行縮放,記憶體就降下來了。一般情況下應該不會載入這麼大的照片的,使用者要是知道,早把你的APP給刪掉了。

iOS工程師非著名自媒體,微信公眾號iOS開發:iOSDevTip運營者

相關推薦

iOS開發UIImage

評論功能真不錯 評論開通後,果然有很多人吐槽。謝謝大家的支援和關愛,如果有做的不到的地方,還請海涵。畢竟我一個人的力量是有限的,我會盡自己最大的努力大家準備一些乾貨。 有些內容可能都是比較基礎的,記住:不積跬步無以至千里,不積小流無以成江海。我想這個道理大家都懂,在為大家準備文章的過程中,對我來說也是一次

微信小程式開發圖片比例 獲取螢幕尺寸圖片尺寸 自適應

早上在論壇上看到有人寫了關於圖片等比例縮放的文章,只是判斷了圖片寬是否大於螢幕寬.我之前在做Android的時候也會遇到圖片等比例縮放的問題.應該是用圖片寬高比和螢幕寬高比做判斷.做個筆記. 老規矩,

自適應神器——css3的rem

1.rem簡介   rem是CSS3中新增加的一個單位值,他和em單位一樣,都是一個相對單位。不同的是em是相對於元素的父元素的font-size進行計算;rem是相對於根元素html的font-size進行計算。這樣一來rem就繞開了複雜的層級關係,實現了類似於em單位的功

上傳圖片時的一個小小算法

lba sim image 委托 fromfile tps 獲取 head 引用 protected void Button1_Click(object sender, EventArgs e) { int width = 300, h

NPOI隨筆——圖片在單元格且居中顯示

iclient convert sub 相對 gpo style 文字 div tsp   NPOI導出的圖片默認是在單元格左上方,這使得圖片在單元格顯示得很難看。居中,且等比縮放,才是圖片在單元格上的完美展示。 /// <

記一次產品需求:圖片和CSS自適應布局16:9

是我 width 圖片展示 網上 IT tom 就會 很好 尺寸 前言   前陣子,產品跑過來問我現有的模板中沒有圖片模板,需要添加一個圖片模板;然而,他要求圖片在展示區最好能夠實現隨著窗口的變化而自動按圖片比例等比縮放,並且居中展示圖片。我當時想著,拋開技術實現層面,圖

AE開發默認滾輪功能反置(C#修改註冊表數據)

arcgis closed wheel engine user 直接 clas for sem ArcMap默認的滾輪縮放是向下放大,向上縮小 如果想修改成向上放大,向下縮小,直接在ArcMap-Customize-ArcMap Options裏, 將最下面的Mouse W

元素解決方案

方案 相對 absolute red add bottom 定位 fff round 一、元素等比縮放解決方案 <style> /*等比縮放*/ .box{ position: relative;

[響應式]兩種圖片寫法

寫法一: <div class="pic"><a href=""><img src="images/pic-product1.jpg" alt=""></a></div> 樣式:  .pic{padding-bo

Swing攝像頭拍照並截圖,後儲存到資料庫後再顯示到桌面

一.功能介面展示: 二.程式碼展示: 以下是Swing窗體,按鈕設定。 /**攝像頭面板*/ static OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameCo

WAP移動端頁面顯示,文字和內容的實現

同一個頁面,在不同顯示比例下如何等等比縮放而使頁面不會變形 比如同一個頁面下,372px 和642px顯示比例下文字大小和塊元素高度會隨著顯示的比例來等比縮放 比例始終顯示協調,不用重複除錯,其中一個重要的元素是將所有定義寬高的元素設定為rem rem是一個相對大小的值

JAVA實現圖片,圖片擷取功能--封裝類

import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.

微信小程式圖片顯示正中間

這是小程式 image標籤的mode ,對圖片的縮放做的處理 縮放 scaleToFill 不保持縱橫比縮放圖片,使圖片的寬高完全拉伸至填滿 image 元素 縮放 aspectFit 保持縱橫比縮放圖片,使圖片的長邊能完全顯示出來。也就是說,可以完整地將圖

[Unity3D]Unity3D遊戲開發滑鼠旋轉、實現3D物品展示

各位朋友,大家好,我是秦元培,歡迎大家關注我的博主,我的部落格地址是blog.csdn.net/qinyuanpei。最近博主重點研究了攝像機旋轉、縮放等問題,那麼今天為大家分享的是一個在3D展示中比較常用的功能,即通過滑鼠右鍵實現旋轉、滑鼠滾輪實現縮放、滑鼠中鍵實現平移

jquery 實現網頁端圖片

一、實現原理 1.固定區域 規定圖片顯示區域大小,例如200px * 200px,最終縮放後圖片不會超出該範圍。 2.圖片尺寸 需要獲取到圖片的高度和寬度,(注意:當然圖片未載入完成,

[ php or jsp ] + jquery.imgareaselect 處理圖片截圖

關鍵字: imgareaselect 圖片縮放 圖片截圖 php jquery 在開發中難免碰到圖片上傳問題!圖片上傳問題很好解決,而上傳到伺服器上的圖片尺寸大小不一,使表現層無法使用統一的規格顯示被上傳的圖片。

圖片上傳裁剪&處理(html5+Canvas)

Capricorncd-image-process Image pre processing for upload (html5 + canvas) 解決圖片上傳前縮放到一定比例自動居中裁剪、

CSS限定圖片寬高在範圍內(img預設寬高屬性)

在標準瀏覽器中,我們可以通過 img{ max-width:400px; max-height:200px; } CSS樣式控制圖片,限定img圖片在指定範圍內等比縮放。該功能實現的前提是最終顯示的img標籤必須預設寬度或高度屬性(img圖片沒有寬高屬性)。 im

iOS xib檔案根據螢幕比例的適配

前言    在此我不是和大家討論,xib相對約束的使用,因為這些文章網上有一大堆的資料,這也不是我今天想要講的東西。    不知道大家平常有沒有碰到過這樣的情況。相信很多人在開發中都會使用storyboard和xib來寫介面,所見即所得,拖拖拽拽就大工告成了,爽的很。不像純程式碼寫介面,還要各種

iOS開發Swift標籤欄按鈕UITabBarItem樣式修改(圖示文字尺寸,顏色

import UIKit   class MainTabViewController:UITabBarController {     override func viewDidLoad()     {         super.viewDidLoad()         // 一共包含了兩個檢視