๐Ÿ“ธ iOS VisionCamera์™€ EXIF Orientation

๐Ÿ“ธ iOS VisionCamera์™€ EXIF Orientation

์•ฑ์—์„œ ์นด๋ฉ”๋ผ๋กœ ์‚ฌ์ง„์„ ์ฐ๊ณ  ํŠน์ • ์˜์—ญ๋งŒ ์ž˜๋ผ ๋ณด์—ฌ์ค˜์•ผ ํ•  ๋•Œ,
โ€œ๊ธฐ๊ธฐ๋ฅผ ์„ธ๋กœ๋กœ ๋“ค๊ณ  ์ฐ์—ˆ๋Š”์ง€, ๊ฐ€๋กœ๋กœ ๋“ค๊ณ  ์ฐ์—ˆ๋Š”์ง€โ€
๊ทธ๋ฆฌ๊ณ  โ€œ์ด๋ฏธ์ง€๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๊ณ  ํ‘œ์‹œ๋˜๋Š”์ง€โ€๋Š”
์ƒ๊ฐ๋ณด๋‹ค ๊นŒ๋‹ค๋กœ์šด ์ฃผ์ œ๋‹ค.

ํŠนํžˆ iOS, VisionCamera, ๊ทธ๋ฆฌ๊ณ  EXIF Orientation(์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜) ๊ฐ’์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด
โ€œ๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์™€ ์‹ค์ œ ํฌ๋กญ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์™œ ๋‹ค๋ฅธ์ง€?โ€
ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋ฐ–์— ์—†๋‹ค.


โœ… ์ด ์ฃผ์ œ๋ฅผ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ์ด์œ 

์นด๋ฉ”๋ผ ์ดฌ์˜ ํ›„ ์‚ฌ์ง„์˜ ํŠน์ • ๋ถ€๋ถ„๋งŒ ํฌ๋กญํ•ด์„œ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ๋‹ค.
ํ™”๋ฉด ๋ฐฉํ–ฅ์€ ํ•ญ์ƒ ์„ธ๋กœ(PORTRAIT)๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์—ˆ์ง€๋งŒ,
๊ธฐ๊ธฐ๋ฅผ ์„ธ๋กœ๋กœ ๋“ค๊ณ  ์ฐ์„ ๋•Œ์™€ ๊ฐ€๋กœ๋กœ ๋“ค๊ณ  ์ฐ์„ ๋•Œ
ํฌ๋กญ๋œ ์ด๋ฏธ์ง€์˜ ์˜์—ญ์ด ์„œ๋กœ ๋‹ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์„ ๊ฒฝํ—˜ํ–ˆ๋‹ค.

์ฒ˜์Œ์—” ๋‹จ์ˆœํžˆ ์›๋ณธ ์ด๋ฏธ์ง€์˜ width/height๊ฐ€ ๋‹ฌ๋ผ์ ธ์„œ ๊ทธ๋Ÿฐ ์ค„ ์•Œ์•˜๋‹ค.
ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ฐ€๋กœ๋กœ ์ฐ๋“ , ์„ธ๋กœ๋กœ ์ฐ๋“  width/height ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š์•˜๋‹ค.
๊ทธ๋Ÿฐ๋ฐ๋„ ํฌ๋กญ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์ด์œ ๋Š”
๋ฐ”๋กœ ์ด๋ฏธ์ง€์˜ โ€œ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜(EXIF Orientation)โ€ ๊ฐ’ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.


๐Ÿ“ท iOS VisionCamera์˜ orientation ??

VisionCamera์—์„œ takePhoto()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด
photoData ๊ฐ์ฒด์—

  • orientation (์˜ˆ: 'portrait', 'landscape-left' ๋“ฑ)

  • metadata.Orientation (EXIF Orientation, 1~8 ์ˆซ์ž)
    ์ด ๋‘ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ๋‹ค.

์ด ๊ฐ’๋“ค์€ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋  ๋•Œ์˜ ์„ผ์„œ/๊ธฐ๊ธฐ ๋ฐฉํ–ฅ๊ณผ ์‚ฌ์ง„์„ ๋ทฐ์–ด์—์„œ ์–ด๋–ป๊ฒŒ ํšŒ์ „ยท๋ฏธ๋Ÿฌ๋งํ•ด์„œ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.


๐Ÿงญ ์ „๋ฉด/ํ›„๋ฉด ์นด๋ฉ”๋ผ๋ณ„ ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ ๊ฐ’์˜ ์ฐจ์ด

โ— ํ›„๋ฉด(Rear) ์นด๋ฉ”๋ผ

  • ์ผ๋ฐ˜์ ์œผ๋กœ

    • ๊ฐ€๋กœ(landscape)๋กœ ์ฐ์œผ๋ฉด:
      orientation: landscape-right (EXIF 1)

    • ์„ธ๋กœ(portrait)๋กœ ์ฐ์œผ๋ฉด:
      orientation: portrait (EXIF 6)

  • ์„ผ์„œ ๊ธฐ์ค€(landscape)์— ๋งž์ถฐ ์ €์žฅํ•˜๊ณ ,
    EXIF๋กœ ํšŒ์ „ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

โ— ์ „๋ฉด(Front, ์…€์นด) ์นด๋ฉ”๋ผ

  • ์—ฌ๊ธฐ์„œ ๋” ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค.

  • ์ „๋ฉด ์นด๋ฉ”๋ผ๋Š”

    • ๋ฏธ๋Ÿฌ(์ขŒ์šฐ๋ฐ˜์ „, ๊ฑฐ์šธ ํšจ๊ณผ)

    • ์„ผ์„œ ๋ฐฉํ–ฅ

    • ์†Œํ”„ํŠธ์›จ์–ด์˜ ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ ๊ณ„์‚ฐ
      ์ด ๋ชจ๋‘ ํ•ฉ์ณ์ ธ์„œ
      ๊ธฐ๊ธฐ๋ฅผ ์„ธ๋กœ๋กœ ๋“ค๊ณ  ์…€์นด๋ฅผ ์ฐ์–ด๋„
      orientation์ด 'landscape-left'(EXIF 5 ๋“ฑ)๋กœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

  • ์ฆ‰, ๋‚ด๊ฐ€ ์ •๋ฉด ์„ธ๋กœ๋กœ ์ฐ์—ˆ๋Š”๋ฐ๋„ landscape๋กœ ๋‚˜์˜ค๋Š” ๊ฑด
    iOS ์ „๋ฉด ์นด๋ฉ”๋ผ์—์„œ ์ •์ƒ ๋™์ž‘์ด๋‹ค.


๐Ÿท๏ธ EXIF Orientation(1~8) ๊ฐ’์˜ ์˜๋ฏธ

๊ฐ’

์„ค๋ช…

ํšŒ์ „/๋ฐ˜์ „

1

์ •์ƒ(ํšŒ์ „ ์—†์Œ)

0ยฐ

3

180๋„ ํšŒ์ „

180ยฐ

6

90๋„ ํšŒ์ „ (์„ธ๋กœ)

90ยฐ

8

270๋„ ํšŒ์ „ (์„ธ๋กœ)

270ยฐ

2

์ขŒ์šฐ๋ฐ˜์ „

0ยฐ + ์ขŒ์šฐ ๋ฏธ๋Ÿฌ

4

180๋„ ํšŒ์ „ + ์ƒํ•˜๋ฐ˜์ „

180ยฐ + ์ƒํ•˜ ๋ฏธ๋Ÿฌ

5

90๋„ ํšŒ์ „ + ์ขŒ์šฐ๋ฐ˜์ „(์…€์นด ๅคš)

90ยฐ + ์ขŒ์šฐ ๋ฏธ๋Ÿฌ

7

270๋„ ํšŒ์ „ + ์ขŒ์šฐ๋ฐ˜์ „

270ยฐ + ์ขŒ์šฐ ๋ฏธ๋Ÿฌ

  • ํ›„๋ฉด ์นด๋ฉ”๋ผ๋Š” ๋Œ€๋ถ€๋ถ„ 1, 3, 6, 8 ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

  • ์ „๋ฉด ์นด๋ฉ”๋ผ์—์„œ๋Š” 5, 6, 7 ๋“ฑ ๋ฏธ๋Ÿฌ ์กฐํ•ฉ์ด ์ž์ฃผ ๋“ฑ์žฅํ•œ๋‹ค.


๐Ÿ’ก Orientation ๊ฐ’์ด ์™œ ํฌ๋กญ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€?

์ด๋ฏธ์ง€๋Š” ์‹ค์ œ ์ €์žฅ๋œ ํ”ฝ์…€(width/height)์€ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ EXIF Orientation ๊ฐ’์ด ๋ถ™์–ด ์žˆ์œผ๋ฉด
๊ฐค๋Ÿฌ๋ฆฌ/์ด๋ฏธ์ง€ ๋ทฐ์–ด์—์„œ๋Š” ์ด ๊ฐ’์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ „ ๋˜๋Š” ๋ฐ˜์ „ํ•ด์„œ ๋ณด์—ฌ์ค€๋‹ค.

๊ทธ๋Ÿฐ๋ฐ,
ํฌ๋กญ ์—ฐ์‚ฐ์€ ๋Œ€๋ถ€๋ถ„ โ€œ์ด๋ฏธ์ง€์˜ ์‹ค์ œ ํ”ฝ์…€ ๊ธฐ์ค€โ€์œผ๋กœ๋งŒ ๋™์ž‘ํ•œ๋‹ค.
์ฆ‰, ์˜ˆ๋ฅผ ๋“ค์–ด

  • ์‚ฌ์šฉ์ž๋Š” ์„ธ๋กœ๋กœ ๋“ค๊ณ  ์…€์นด๋ฅผ ์ฐ์—ˆ๊ณ 

  • ํ”„๋ฆฌ๋ทฐ์—์„œ๋„ ์–ผ๊ตด์ด ์ค‘์•™์— ์ž˜ ๋ณด์˜€๋Š”๋ฐ

  • ์‹ค์ œ ์ €์žฅ๋œ ์ด๋ฏธ์ง€๋Š” ์„ผ์„œ(landscape ๊ธฐ์ค€)๋กœ ์ €์žฅ + EXIF orientation=6(90๋„ ํšŒ์ „)

  • ์ด ์ƒํƒœ์—์„œ โ€œ์ค‘์•™์„ ์ž˜๋ผ์•ผ๊ฒ ๋‹ค!โ€๊ณ 
    ํ”ฝ์…€ ๊ธฐ์ค€์œผ๋กœ ์ค‘์•™์„ ํฌ๋กญํ•˜๋ฉด,
    ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ๊ธฐ๋Œ€ํ•œ ์–ผ๊ตด ์˜์—ญ์ด ์•„๋‹ˆ๋ผ
    ์‚ฌ์ง„์„ 90๋„ ๋Œ๋ ธ์„ ๋•Œ์˜ ์ค‘์•™ ์˜์—ญ(์—‰๋šฑํ•œ ๋ถ€๋ถ„)์ด ์ž˜๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด

  • EXIF orientation์„ ๋ฌด์‹œํ•˜๋ฉด โ€œ๋Œ๋ ค์„œ ์ž˜๋ผ์•ผ ํ•  ์ด๋ฏธ์ง€โ€๋ฅผ
    ๊ทธ๋ƒฅ ๋ˆ•ํ˜€๋†“๊ณ  ์ž˜๋ผ์„œ

    ์›ํ•˜๋Š” ๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ผ ์—‰๋šฑํ•œ ๋ถ€๋ถ„์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์ •ํ™•ํžˆ ํ”„๋ฆฌ๋ทฐ์—์„œ ๋ณธ ์˜์—ญ์„ ์ž˜๋ผ๋‚ด๊ณ  ์‹ถ์œผ๋ฉด
์ด๋ฏธ์ง€์˜ EXIF orientation ๊ฐ’์— ๋”ฐ๋ผ
๋จผ์ € ์ด๋ฏธ์ง€๋ฅผ ํšŒ์ „/๋ฏธ๋Ÿฌ๋ง ๋ณด์ •ํ•œ ๋’ค์—
ํฌ๋กญ ์—ฐ์‚ฐ์„ ํ•ด์•ผ ํ•œ๋‹ค.


๐Ÿ› ๏ธ ๋ฐฉ๋ฒ•

ํฌ๋กญ ์—ฐ์‚ฐ ์ „์— EXIF Orientation ๊ฐ’์„ ์ฝ๊ณ ,
์ด๋ฏธ์ง€์— ๋งž๋Š” ํšŒ์ „/๋ฏธ๋Ÿฌ ๋ณด์ •์„ ๋จผ์ € ํ•ด์ค€ ๋‹ค์Œ
ํฌ๋กญ์„ ํ•ด์•ผ
๋ชจ๋“  ์ƒํ™ฉ์—์„œ โ€œํ”„๋ฆฌ๋ทฐ์—์„œ ๋ณธ ๋ชจ์Šตโ€๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

orientation ๋ณด์ • ์—†์ด ์ž๋ฅด๋ฉด
์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅธ ์˜์—ญ์ด ์ž˜๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.


โœ… ์ •๋ฆฌ

  • iOS VisionCamera์˜ orientation ๊ฐ’(์ „๋ฉด/ํ›„๋ฉด)์€
    ์„ผ์„œ ๋ฐฉํ–ฅ, ๋ฏธ๋Ÿฌ ์—ฌ๋ถ€, ์†Œํ”„ํŠธ์›จ์–ด ํšŒ์ „ ๋ณด์ • ๋“ฑ์ด ๋ชจ๋‘ ํ•ฉ์ณ์ง„ ๊ฒฐ๊ณผ๋‹ค.

  • ์ „๋ฉด(์…€์นด) ์นด๋ฉ”๋ผ๋Š” orientation ๊ฐ’์ด ๋‚ด๊ฐ€ ๋“  ๊ธฐ๊ธฐ ๋ฐฉํ–ฅ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

  • EXIF Orientation ๊ฐ’์— ๋”ฐ๋ผ
    ํฌ๋กญ ์œ„์น˜์™€ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ
    ๋ฐ˜๋“œ์‹œ orientation ๋ณด์ • ํ›„ ํฌ๋กญํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค.

Share article

RN ์‚ฝ์งˆ ์ผ์ง€