[iOS] PHAsset to UIImage ๐Ÿ“ท

ohtt-iOSยท2021๋…„ 12์›” 16์ผ
0

iOS

๋ชฉ๋ก ๋ณด๊ธฐ
23/24
post-thumbnail
post-custom-banner

์ด ๊ธ€์€ PhotoKit์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ๋‹ค๋ฃจ๋Š” ๊ธ€์€ ์•„๋‹™๋‹ˆ๋‹ค.
๊ณต์‹๋ฌธ์„œ ๋กœ ์ด๋™ํ•˜์‹œ๋ฉด ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š

๐Ÿค” ์„œ๋ก 

ํฌํ†  ํ”ผ์ปค๋ฅผ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋Š”
BSImagePicker๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ PHAsset์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒจ์„œ ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค



๐Ÿ“ท PhotoKit

PhotoKit์€ ์•จ๋ฒ”์— ์žˆ๋Š” ์‚ฌ์ง„๋“ค์ด๋‚˜ iCloud์— ์žˆ๋Š” ์‚ฌ์ง„๋“ค์„ ๊ฐ€์ ธ์™€
์•ฑ์—์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Kit ์ž…๋‹ˆ๋‹ค ! ( Photos ์™€ PhotosUI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํฌํ•จ๋จ )
๋ชฐ๋ž๋Š”๋ฐ ์‚ฌ์ง„์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ฑ์„ ํ†ตํ•ด์„œ ์•จ๋ฒ”์— ์žˆ๋Š” ์‚ฌ์ง„๋“ค์„ ์ˆ˜์ •/์‚ญ์ œํ•˜๊ฑฐ๋‚˜
์ฆ๊ฒจ์ฐพ๋Š” ์‚ฌ์ง„์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ํ•˜๋Š” ๊ฒƒ๋“ค๋„ ํ•  ์ˆ˜ ์žˆ๋”๋ผ๊ตฌ์š” !
์•Œ์•„๋‘์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :)

์‚ฌ์ง„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์•ฑ๋“ค์ด ์ด๋Ÿฐ์‹์œผ๋กœ ๋™์ž‘์„ ํ•˜๋Š”๊ฑฐ์˜€๋„ค์š” !


PHAsset โžก๏ธ UIImage

์ด์ œ ์ด ๊ธ€์˜ ๋ณธ๋ก ์ธ PHAsset to UIImage๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.

import Photos

extension PHAsset {
  func getAssetThumbnail() -> UIImage {
    let manager = PHImageManager.default()
    let option = PHImageRequestOptions()
    var thumbnail = UIImage()
    manager.requestImage(for: self,
                            targetSize: CGSize(width: self.pixelWidth, height: self.pixelHeight),
                            contentMode: .aspectFit,
                            options: option,
                            resultHandler: {(result, info) -> Void in
      thumbnail = result!
    })
    return thumbnail
  }
}

PHImageManager์˜ requestImage๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด UIImage๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋‚˜ option๋“ค์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ญ๊ฐ€ ๋งŽ๋‹ค.. !

์—ฌ๊ธฐ์„œ RequestOptions๋“ค์„ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๋ณด๋ฉด

  • isSynchronous
    - Photosํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ด๋ฏธ์ง€ ์š”์ฒญ์„ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” ํ”„๋กœํผํ‹ฐ์ž…๋‹ˆ๋‹ค.
    -> ๊ธฐ๋ณธ๊ฐ’์€ false์ด๊ณ  true๋กœ ์ง€์ •ํ•˜๋ ค๋ฉด ์š”์ฒญ์„ backgroud ์Šค๋ ˆ๋“œ์—์„œ๋งŒ ์š”์ฒญ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ~!
  • deliveryMode
    - ์ด๊ฒŒ ์กฐ๊ธˆ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ์ œ์ƒ๊ฐ
    • ์ œ๋“œ๋‹˜ ๋ธ”๋กœ๊ทธ ๋ฅผ ๋ณด์‹œ๋ฉด ์•„์ฃผ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด์žˆ์ง€๋งŒ, ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด isSynchronous๋ฅผ false (๊ธฐ๋ณธ๊ฐ’) ์œผ๋กœ ํ•ด๋‘” ์ƒํƒœ๋ผ๋ฉด ์ด ์นœ๊ตฌ์˜ ๊ธฐ๋ณธ๊ฐ’์€ opportunistic ์œผ๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ์œผ๋ฉด ๊ณ ํ’ˆ์งˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „์— ์ž ๊น ํ‘œ์‹œํ•ด์ค„ ์ €ํ’ˆ์งˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค... ! ๊ทธ๋ž˜์„œ ์ €ํ’ˆ์งˆ / ๊ณ ํ’ˆ์งˆ ์ด๋ ‡๊ฒŒ 2๋ฒˆ ์‘๋‹ต์ด ์˜จ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค ์‹ ๊ธฐ๋ฐฉ๊ธฐ


์ด๊ฒƒ ์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ ~
๋” ๋งŽ์€ ๊ณต๋ถ€๋ฅผ ์›ํ•˜์‹ ๋‹ค๋ฉด phimagerequestoptions ๊ณต์‹๋ฌธ์„œ ๋ฐ”๋กœ๊ฐ€๊ธฐ!

์šฐ์„  ์ œ๊ฐ€ ์ ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ€๋ถ„์„ ์œ„์ฃผ๋กœ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ์— ์‹œ๊ฐ„์ด ๋  ๋•Œ ๋” ๊นŠ๊ฒŒ ํŒŒ๋ณด๋ฉด ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š” ๐Ÿ˜Š

profile
์˜ค๋œจ ์‚ฝ์งˆ ๐Ÿ”จ ๋ธ”๋กœ๊ทธ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€