2021. 7. 12. 13:21ㆍiOS
이미지에는 png와 jpg를 많이 쓸텐데 기본적으로 권장되는 형식은 png이다.
프로젝트에 이미지 자원을 추가하기 위해서 Assets.xcassets 에 이미지를 드랍하는 형식을 사용한다.
이때 이미지이름의 접미어에 @1x, @2x, @3x 중 하나를 붙이면 해당 섹션에 자동으로 이미지가 넣어진다. 1x 2x 3x는 간단히 말하자면 해상도의 차이인데 레티나 디스플레이 이전에는 저해상도만을 지원하기 때문에 1x 를 주로 사용하지만, 레티나 이후는 2x를, ~~Plus ~~Pro 가 붙은 기종들은 3x의 이미지를 사용한다. 더 자세한 설명은 여기를 참고
이제 추가한 이미지들을 ImageView에 넣을 수 있다.
Interface Builder에서 넣는 방법은 storyboard 라이브러리에서 ImageView를 SubView로 추가하고 inspector attribute에 있는 image option에 값을 입력하거나 드랍버튼을 눌러 직접 선택하면 된다. 매우 간단한 방법!
코드로도 구현이 가능하다. 아래처럼 구현할 건데
먼저 이 이미지의 이름은 lime 이고, 이 lime은 UIImageView타입의 imageView 라는 변수로 선언했다.
let img1 = UIImage(named: "lime")
imageView.image = img1
그러면 이렇게 하면 된다. 물론 UIImage(named:) 는 옵셔널을 반환하기 때문에 if let을 사용해도 되지만 설령 lime이 assets에 없어도 nil을 반환하므로 앱이 crash 되는 일은 없다. 이미지가 나오지 않을뿐..
또 한가지 방법은 Image 를 Literal 하게 구현하는 것인데,
이 방법은 신기하기는 해도 추천하지 않는다. 첫번째 방법과는 다르게 나중에 해당 이미지를 지우면 앱이 crash 되기 때문. 알아만 두자.
이미지 사이즈 알아내기
이미지의 사이즈 알아내기는 간단하다. 그냥 이미지 객체에 구현되어있는 size 프로퍼티를 불러내기만 하면 된다.
if let ptSize = img1?.size {
print("Image Size : \(ptSize)")
}
픽셀사이즈는 이미지의 가로크기 * scale과 세로크기 * scale을 CGSize의 인자로 전달하여 구한다.
if let ptSize = img1?.size, let scale = img1?.scale {
let px = CGSize(width: ptSize.width * scale, height: ptSize.height * scale)
print("Image Size(px) \(px)")
}
추가로 이미지를 네트워크를 통해 전달해야 할 때, 이미지를 바이너리 형태로 바꿔주어야 한다.
// png바이너리로 바꾸고 싶다면
let pngData = img1?.pngData()
// jpg바이너리로 바꾸고 싶다면
let jpgData = img1?.jpegData(compressionQuality: 1.0)
// compressionQuality(압축률)가 높을수록 품질이 좋아짐
'iOS' 카테고리의 다른 글
iOS) 포토 라이브러리에서 사진 가져오기 (0) | 2021.07.23 |
---|---|
iOS) 키보드 한글처리 addingPercentEncoding(withAllowedCharacters:) (0) | 2021.07.14 |
iOS) Collection View 와 Page Control (0) | 2021.07.10 |
[iOS] 세그웨이 Segue :: 스토리보드에서 화면을 전환하는 3가지 방법 (0) | 2021.03.01 |
[iOS] Navigation Controller :: 스토리보드에서 화면을 전환하는 3가지 방법 (1) | 2021.02.28 |