実素材 @ PictureSpec

コマで表示される実物の素材。

カラム

name和名typedefaultnulllimitnote
original_picture_id原画integer FALSE 原画id
revisionバージョンinteger FALSE バージョン
ext画像フォーマットstring FALSE4画像フォーマット
widthinteger FALSE 幅 ピクセル数
height高さinteger FALSE 高さ ピクセル数
filesizeファイルサイズinteger FALSE 画像のファイルサイズ
md5MD5string FALSE32画像のmd5値
artist_id絵師integer FALSE 絵師id
license_idライセンスinteger FALSE 付与ライセンスid
system_picture_id画像integer FALSE クレジットアイコン
license_group_classnameライセンスクラス名string FALSE50ライセンスクラス名
credit_picture_settings|クレジット拡張データstring クレジット拡張データ
license_group_settings拡張データstring 拡張データ
license_settings拡張データstring 拡張データ
created_at作成datetime
updated_at更新datetime

作成手順

原画にライセンスが選択されて素材が作成される段階で作成されるデータなので、クライアントから明示的に作成する機会はない。

作成時に反転画像、gifフォーマット画像も作成する。レコードの作成と画像の保存は一つのトランザクションで行う。画像の保存にはPictureIoを使う。

データは素材からコピーする。原画からでは一部のデータしか補充できない。つまり、実素材作成前に素材を作成しなければならない。しかし、素材の作成には実素材idが必要という矛盾。そこで素材を生成して、保存の直前に実素材を作成して、素材を保存する手順となる。

Revisionは自前で補充する。実素材は常に新規作成で更新しない。勝手にバージョンを上げて積んでいく。

  • gifフォーマット変換
    • ie6では透過pngを透過できないため、png画像はgifに変換する。
    • 反転画像についても、すべて変換する。
    • ただし、ライセンスが変換を禁止している場合は、変換してはならない。
  • 反転
    • 画像を水平反転・垂直反転・水平垂直反転したものを、それぞれ保存する。
    • ただし、ライセンスが変換を禁止している場合は、変換してはならない。

検証

カラム別

original_picture_id

  • nullでないこと。
  • 数値であること
  • 存在する原画であること。

revision

  • nullでないこと。
  • 数値であること

ext

  • nullでないこと。
  • 4文字以内であること。
  • png、gif、jpegのいずれかであること。

width

  • nullでないこと。
  • 数値であること
  • 正の整数であること。

height

  • nullでないこと。
  • 数値であること
  • 正の整数であること。

filesize

  • nullでないこと。
  • 数値であること
  • 2MB以内であること。

artist_id

  • nullでないこと。
  • 数値であること
  • 存在する絵師であること

license_id

  • nullでないこと。
  • 数値であること
  • 存在するライセンスであること。

artist_name

  • nullでないこと。

classname

  • nullでないこと。
  • 50文字以内であること。

credit

settings

全体

所属モデル

機能

デフォルト値補充

supply_default()

パラメータ

解説

  • 補充すべきデータはない

上書き補充

overwrite(rp)

パラメータ

  • rp:原画データ

解説

  • 対象素材の諸データを補充する。
  • width, height, ext, filesize, md5, original_picture_id, artist_id
  • license_id, artist_id, artist_name, classname, credit, settings
  • revisionは、new_revisionに問い合わせてセットする。

所持判定

own?(roles)

パラメータ

  • roles:ロールリスト

戻り

真偽

解説

自身の持ち主がロールリスト内に含まれるかどうかをTrue/Falseで返す

  • 自身にロールリストからの絵師取得を依頼して、ロール内絵師を取得する。
    • ロールリストを渡す。
  • ロール内絵師が取得できないとき、Falseを返す。
  • ロール内絵師のidが自身の絵師idと一致するならTrue、しないならFalseを返す。

閲覧許可

visible?(roles)

パラメータ

  • roles:ロールリスト

戻り

真偽

解説

対象の作家が実素材を閲覧できるかどうかを判定する。コマに貼られた実素材は(たとえ更新されて旧くなったとしても)ライセンス受諾済なので閲覧許可は必要ない。よって、必ずTrueを返す。

  • Trueを返す。

詳細閲覧許可

showable?(au = nil)

パラメータ

  • au:作家データ

戻り

真偽

解説

対象の作家が実素材の詳細ページを閲覧できるかどうかを判定する。

コマに貼られた実素材は(たとえ更新されて旧くなったとしても)ライセンス受諾済なので閲覧許可は必要ない。しかし、詳細ページや最近使われたコマ絵などに表示される画像、墨塗画像ついては、旧版の実素材を表示する訳にはいかない。それらでは、素材として公開されている最新版の実素材と自作の実素材だけが表示を許される。

パラメータに作家データを取っているが、自家製素材だけは常時閲覧できるようにしているだけなので必ずしも要るわけではない。

  • 自身に原画がリンクしていないなら、Falseを返す。
  • 自身に所持判定を問い合わせ、結果がTrueならTrueを返す。
  • 自身にhead判定と有効性判定を問い合わせ、両者がTrueならTrueを返す。
  • それ以外はFalseを返す。

ファイル名

filename

解説

画像ファイル名を返す。id+拡張子のフォーマットとなる。PictureIoとは、このファイル名でやり取りする。

gifファイル名

gifname

解説

gif変換した画像ファイル名を返す。id.gifのフォーマットとなる。gif変換許可画像では、PictureIoとは、このファイル名でやり取りする。

MimeType

mime_type

解説

ブラウザに画像バイナリデータを送信する時のMimeTypeを返す。

ファイルのurl

url

解説

Imgタグでsrcに使う、この実素材のUrlを返す。

最新Revision取得

new_revision

パラメータ

なし

解説

  • 原画idが一致する最大のRevisionを取得する。

有効性判定

enable?

パラメータ

なし

戻り

真偽

解説

  • 自身と同系列の最新版実素材にリンクした素材があるか?

配布中止されていれば素材は削除されているので、たとえ最新版であっても偽となる。

head取得

head

パラメータ

なし

戻り

実素材オブジェクト

解説

自身と同じ原画から派生した実素材の中から最新Revisionのものを返す。素材の有効性までは考慮していないので、戻りを表示してはならない。

  • 実素材モデルに一件取得を依頼して、head実素材を取得する。
    • 検索条件として原画idの一致、ソート条件としてRevision降順を渡す。
  • head実素材を返す。

head判定

head?

パラメータ

なし

戻り

真偽

解説

  • 自身のidと、headのidが一致しているならTrueを返す。

フォーマット変換対象判定

to_gif?

パラメータ

なし

解説

  • 画像フォーマットがpngかつライセンスの変換禁止フラグが無効のときTrue

サブディレクトリリスト

subdirs

パラメータ

解説

  • 加工画像の保存先(サブディレクトリ)を配列で返す。
  • 反転が許可されているときは、本画像(ベースディレクトリ)に加えて垂直・水平・垂直水平反転ディレクトリも返す。
  • 反転が許可されていないときは、本画像(ベースディレクトリ)だけを返す。

md5重複リスト

list_by_md5 md5, opid = nil

パラメータ

  • md5:md5値
  • opid:除外する原画id

解説

除外する原画を指定できる。

  • md5が一致する実素材を取得する。
  • ただし、除外する原画idで指定された場合は、その原画の実素材は含まない。

単体取得

show(id, au)

パラメータ

  • id:実素材id
  • au:作家データ

解説

  • idの実素材を取得する。
  • 関連データの単体取得オプションを含まない。
  • 実素材に閲覧許可を問い合わせ、不許可なら、例外403 ActiveRecord::Forbiddenを発生させる。
  • 存在しない実素材のidを要求された場合は、例外404 ActiveRecord::RecordNotFoundを発生させる。

編集取得

単体取得オプション

コマ表示は実素材の単体取得を多用するので、高速化を考慮して関連データを取らない。

json単体出力オプション

コマ表示は実素材の単体取得を多用するので、高速化を考慮して関連データを取らない。

作成

store(imager)

パラメータ

  • imager:原画をロードした画像ライブラリ

解説

  • 自身を保存する。
  • 画像ファイルの作成機能で画像を保存する。
    • 画像ライブラリと正規ファイル名を渡す。
  • 自身にフォーマット変換対象かを問い合わせ、必要なら保存する。
    • 画像ライブラリにGif変換を依頼し、gifデータをロードした画像ライブラリを取得する。
    • 画像ファイルの作成機能で画像を保存する。
      • gif画像ライブラリとgifファイル名を渡す。
  • 全ての保存が正しく終わればTrueを返す。
  • 例外ケース
    • 自身の保存に失敗したなら、Falseを返す。
    • 画像の保存に失敗したなら、Falseを返す。
    • gif変換に失敗したなら、Falseを返す。
    • gif画像の保存に失敗したなら、Falseを返す。

素材作成時に動く機能で、原則素材側でトランザクションするので、結果が失敗であっても行は保存されている。

画像ファイルの作成

store_picture(imager, fn)

パラメータ

  • imager:画像ライブラリ
  • fn:保存ファイル名

解説

PictureIo経由で画像を保存するための機能。ファイル名に自身のidを使うので事前に自身の保存が必要。

画像には本画像データと付属画像がある。付属画像とは、反転加工した画像のこと。今のところの垂直反転、水平反転、垂直水平反転の三種類だが、拡張を考慮して一律に処理できるように規則を決めておく。規則とは、ライブラリが対応する加工メソッドと同じ名前のサブディレクトリに保存するということ。たとえば垂直反転メソッドはvなので、ライブラリのvで垂直反転された画像はvというサブディレクトリに保存される。なお、サブディレクトリがないものは本画像なので、加工しないでベースディレクトリに保存する。また、gif変換が必要な画像の場合、ライブラリがgif画像をロードして呼び出してくるので、同様に保存する。

  • 自身にサブディレクトリリストを問い合わせ、全ディレクトリに保存する。
    • パラメータとして、画像データと保存ファイル名とサブディレクトリを渡す。
  • 全ての画像の保存が正しく終わればTrueを返す。
  • 例外ケース
    • 画像の保存に失敗したなら、Falseを返す。

画像ファイルの復元

restore(subdir = nil)

パラメータ

  • subdir:サブディレクトリ

解説

PictureIo経由で画像を復元するための機能。

墨塗

unpublish

戻り

真偽

解説

絵師が削除したり管理者が削除したり。

  • 画像ライブラリにロードを依頼して、×画像ライブラリを取得する。
  • 自身に作成を依頼して、結果を取得する。
    • ×画像ライブラリを渡す。
  • 結果を返す。
  • 例外ケース
    • 画像ライブラリのロードに失敗したときは、Falseを返す。

エクスポート

export dt = nil

パラメータ

  • dt:開始日時

戻り

開始日時以降の内原画リスト

解説

  • 開始日時以降に更新された内実素材を返す。
  • 貸手からの実素材は除く(絵師に作家がリンクされていない)
  • 絵師を含む。
  • 開始日時が省略された場合はすべての内実素材を返す。

エクスポート用画像データ

picture_data

パラメータ

戻り

画像データ

解説

復元した画像ファイルをBase64でエンコして返す。

  • 自身に画像ファイルの復元を依頼して、Base64でエンコして返す。

Jsom出力 画像データ添え

to_json_with_picture_data

パラメータ

戻り

json文字列

解説

  • 自身に画像データを(picture_dataというカラム名で)添えてjson化して返す。

インポート用実素材のリストを返す。

リストのjson化

self.list_as_json_text ary

パラメータ

  • ary:実素材リスト

戻り

json文字列

解説

実素材リストの各実素材に画像データを添えて、json文字列にして返す。