先日React NativeでやったことのiOSネイティブ実装版です。

React Native版はこれ↓

React Nativeで画像のRGBA値を得る - PIYO - Tech & Life -
React Nativeで画像のRGBA値が欲しくて調べてたらreact-native-image-toolsというライブラリを見つけました。 Benjamin-Lin-X/react-native-image-tools Contribute to Benjamin-Lin-X/react-native-image-tools

んで、Swift版なんですが、いい感じに実装してくれているEasyImagyというライブラリを見つけたのでこれを試してみました。

koher/EasyImagy
Makes it easy to process images in Swift. Contribute to koher/EasyImagy development by creating an account on GitHub.

日本の方っぽいですね。ありがたや。

お試し用の画像としては以下を使います。画素がはっきりしているのでわかりやすくて良いんです。

https://imgur.com/download/OSEiha9

UIImageDataなどを使ってインスタンスを初期化しうると画素を取れるようになります。

// UIImageの場合
image = Image<RGBA<UInt8>>(uiImage: imageView.image!)

各色の列を取り出してテキストに出力してみました。UITextViewを縦に4つ並べて雑に書き出しています。対象のViewController全体のコードは↓のようになりました。

import EasyImagy

class EasyImagyViewController: UIViewController {

    @IBOutlet weak var redText: UITextView!
    @IBOutlet weak var greenText: UITextView!
    @IBOutlet weak var blueText: UITextView!
    @IBOutlet weak var alphaText: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let uiImage : UIImage = #imageLiteral(resourceName: "image")
        let image = Image<RGBA<UInt8>>(uiImage: uiImage)
        redText.text = "\(image.map { $0.redInt })"
        greenText.text = "\(image.map { $0.greenInt })"
        blueText.text = "\(image.map { $0.blueInt })"
        alphaText.text = "\(image.map { $0.alphaInt })"
    }
}

結果このようになりました。各色のデータとわかるように色をつけています。最後はAlphaです。それぞれをIntで出しているので0〜255の範囲になっています。見た感じちゃんと取れていそうですね。

ソースはこちらに。

pi-chan/ios-sandbox2
Contribute to pi-chan/ios-sandbox2 development by creating an account on GitHub.