PIYO - Tech & Life -

EasyImagyを使ってiOSでの画像の画素列を取得する

iOS Swift

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

React Native版はこれ↓

React Nativeで画像のRGBA値を得る - PIYO - Tech & Life -
React Nativeで画像のRGBA値が欲しくて調べてたらreact-native-image-toolsというライブラリを見つけました。 GitHub - Benjamin-Lin-X/react-native-image-tools Contribute to Benjamin-Lin-X/react-native-image-tools development by creating an account on GitHub. github.com かなり名前が近い別パッケージもあるので混

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

GitHub - koher/swift-image: SwiftImage: an image library in Swift with Swifty APIs and value semantics
SwiftImage: an image library in Swift with Swifty APIs and value semantics - GitHub - koher/swift-image: SwiftImage: an image library in Swift with Swifty APIs and value semantics

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

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

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の範囲になっています。見た感じちゃんと取れていそうですね。

ソースはこちらに。

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