【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS中圖片縮略技術(shù)有哪些_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS中圖片縮略技術(shù)有哪些_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS中圖片縮略技術(shù)有哪些_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS中圖片縮略技術(shù)有哪些_第4頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS中圖片縮略技術(shù)有哪些_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS中圖片縮略技術(shù)有哪些

UIKitUIGraphicsBeginImageContextWithOptions&UIImage-drawInRect:extension

UIImage

{

//UIKit

func

resizeUI(size:

CGSize)

->

UIImage?

{

let

hasAlpha

=

false

let

scale:

CGFloat

=

0.0

//

Automatically

use

scale

factor

of

main

screen

/**

創(chuàng)建一個(gè)圖片類型的上下文。調(diào)用UIGraphicsBeginImageContextWithOptions函數(shù)就可獲得用來處理圖片的圖形上下文。利用該上下文,你就可以在其上進(jìn)行繪圖,并生成圖片

size:表示所要?jiǎng)?chuàng)建的圖片的尺寸

opaque:表示這個(gè)圖層是否完全透明,如果圖形完全不用透明最好設(shè)置為YES以優(yōu)化位圖的存儲,這樣可以讓圖層在渲染的時(shí)候效率更高

scale:指定生成圖片的縮放因子,這個(gè)縮放因子與UIImage的scale屬性所指的含義是一致的。傳入0則表示讓圖片的縮放因子根據(jù)屏幕的分辨率而變化,所以我們得到的圖片不管是在單分辨率還是視網(wǎng)膜屏上看起來都會(huì)很好

*/

UIGraphicsBeginImageContextWithOptions(size,

!hasAlpha,

scale)

self.draw(in:

CGRect(origin:

.zero,

size:

size))

let

resizedImage

=

UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return

resizedImage!

}

}CoreGraphicsCGBitmapContextCreate&CGContextDrawImageextension

UIImage

{

//CoreGraphics

func

resizeCG(size:CGSize)

->

UIImage?

{

guard

let

cgImage

=

self.cgImage

else

{

return

nil

}

let

bitsPerComponent

=

cgImage.bitsPerComponent

let

bytesPerRow

=

cgImage.bytesPerRow

let

colorSpace

=

cgImage.colorSpace

let

bitmapInfo

=

cgImage.bitmapInfo

guard

let

context

=

CGContext(data:

nil,

width:

Int(size.width),

height:

Int(size.height),

bitsPerComponent:

bitsPerComponent,

bytesPerRow:

bytesPerRow,

space:

colorSpace!,

bitmapInfo:

bitmapInfo.rawValue)

else

{

return

nil

}

erpolationQuality

=

.high

context.draw(cgImage,

in:

CGRect(origin:

.zero,

size:

size))

let

resizedImage

=

context.makeImage().flatMap

{

UIImage(cgImage:

$0)

}

return

resizedImage

}

}/upload/information/20200623/126/119325.gifImageIOCGImageSourceCreateThumbnailAtIndexextension

UIImage

{

//ImageIO

func

resizeIO(size:CGSize)

->

UIImage?

{

guard

let

data

=

UIImagePNGRepresentation(self)

else

{

return

nil

}

let

maxPixelSize

=

max(size.width,

size.height)

//let

imageSource

=

CGImageSourceCreateWithURL(url,

nil)

guard

let

imageSource

=

CGImageSourceCreateWithData(data

as

CFData,

nil)

else

{

return

nil

}

//kCGImageSourceThumbnailMaxPixelSize為生成縮略圖的大小。當(dāng)設(shè)置為800,如果圖片本身大于800*600,則生成后圖片大小為800*600,如果源圖片為700*500,則生成圖片為800*500

let

options:

[NSString:

Any]

=

[

kCGImageSourceThumbnailMaxPixelSize:

maxPixelSize,

kCGImageSourceCreateThumbnailFromImageAlways:

true

]

let

resizedImage

=

CGImageSourceCreateImageAtIndex(imageSource,

0,

options

as

CFDictionary).flatMap{

UIImage(cgImage:

$0)

}

return

resizedImage

}

}CoreImageextension

UIImage

{

//CoreImage

func

resizeCI(size:CGSize)

->

UIImage?

{

guard

let

cgImage

=

self.cgImage

else

{

return

nil

}

let

scale

=

(Double)(size.width)

/

(Double)(self.size.width)

let

image

=

CIImage(cgImage:

cgImage)

let

filter

=

CIFilter(name:

"CILanczosScaleTransform")!

filter.setValue(image,

forKey:

kCIInputImageKey)

filter.setValue(NSNumber(value:scale),

forKey:

kCIInputScaleKey)

filter.setValue(1.0,

forKey:kCIInputAspectRatioKey)

guard

let

outputImage

=

filter.value(forKey:

kCIOutputImageKey)

as?

CIImage

else

{

return

nil}

let

context

=

CIContext(options:

[kCIContextUseSoftwareRenderer:

false])

let

resizedImage

=

context.createCGImage(outputImage,

from:

outputImage.extent).flatMap

{

UIImage(cgImage:

$0)

}

return

resizedImage

}

}/upload/information/20200623/126/119326.gifvImageextension

UIImage

{

//vImage

func

resizeVI(size:CGSize)

->

UIImage?

{

guard

let

cgImage

=

self.cgImage

else

{

return

nil

}

var

format

=

vImage_CGImageFormat(bitsPerComponent:

8,

bitsPerPixel:

32,

colorSpace:

nil,

bitmapInfo:

CGBitmapInfo(rawValue:

CGImageAlphaInfo.first.rawValue),

version:

0,

decode:

nil,

renderingIntent:

.defaultIntent)

var

sourceBuffer

=

vImage_Buffer()

defer

{

free(sourceBuffer.data)

}

var

error

=

vImageBuffer_InitWithCGImage(&sourceBuffer,

&format,

nil,

cgImage,

numericCast(kvImageNoFlags))

guard

error

==

kvImageNoError

else

{

return

nil

}

//

create

a

destination

buffer

let

scale

=

self.scale

let

destWidth

=

Int(size.width)

let

destHeight

=

Int(size.height)

let

bytesPerPixel

=

cgImage.bitsPerPixel

/

8

let

destBytesPerRow

=

destWidth

*

bytesPerPixel

let

destData

=

UnsafeMutablePointer<UInt8>.allocate(capacity:

destHeight

*

destBytesPerRow)

defer

{

destData.deallocate(capacity:

destHeight

*

destBytesPerRow)

}

var

destBuffer

=

vImage_Buffer(data:

destData,

height:

vImagePixelCount(destHeight),

width:

vImagePixelCount(destWidth),

rowBytes:

destBytesPerRow)

//

scale

the

image

error

=

vImageScale_ARGB8888(&sourceBuffer,

&destBuffer,

nil,

numericCast(kvImageHighQualityResampling))

guard

error

==

kvImageNoError

else

{

return

nil

}

//

create

a

CGImage

from

vImage_Buffer

var

destCGImage

=

vImageCreateCGImageFromBuffer(&destBuffer,

&format,

nil,

nil,

numericCast(kvImageNoFlags),

&error)?.takeRetainedValue()

guard

error

==

kvImageNoError

else

{

return

nil

}

//

create

a

UIImage

let

re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論