Sha256: 3625c9583f07dd7e5bd8e28814a23d981bef20fd18bdeb33f10aa028009d8da0

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

require "numo/narray"
require_relative "../../ext/rb_stb_image/rb_stb_image"

module DNN
  module Image
    def self.read(file_name)
      raise Image::ReadError.new("#{file_name} is not found.") unless File.exist?(file_name)
      bin, w, h, n = Stb.stbi_load(file_name, 3)
      img = Numo::UInt8.from_binary(bin)
      img.reshape(h, w, 3)
    end

    def self.write(file_name, img, quality: 100)
      if img.shape.length == 2
        img = Numo::UInt8[img, img, img].transpose(1, 2, 0).clone
      elsif img.shape[2] == 1
        img = img.reshape(img.shape[0], img.shape[1])
        img = Numo::UInt8[img, img, img].transpose(1, 2, 0).clone
      end
      h, w, ch = img.shape
      bin = img.to_binary
      case file_name
      when /\.png$/i
        stride_in_bytes = w * ch
        Stb.stbi_write_png(file_name, w, h, ch, bin, stride_in_bytes)
      when /\.bmp$/i
        Stb.stbi_write_bmp(file_name, w, h, ch, bin)
      when /\.jpg$/i, /\.jpeg/i
        Stb.stbi_write_jpg(file_name, w, h, ch, bin, quality)
      end
    rescue => ex
      raise Image::WriteError.new(ex.message)
    end
  end

  class Image::Error < StandardError; end

  class Image::ReadError < Image::Error; end

  class Image::WriteError < Image::Error; end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby-dnn-0.10.1 lib/dnn/image.rb
ruby-dnn-0.10.0 lib/dnn/image.rb