Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@ariela

CLIP STUDIO PAINTで作成した漫画データのサムネール出力の為の調査

More than 3 years have passed since last update.

参考ページ

CLIP STUDIO PAINTの.lipファイルをハックして作業動画を書き出すWindowsアプリを作った – NET BIZ DIV. TECH BLOG
イラストを Git で管理したかったのでツールをつくった - blog.syfm

思いつき

上記ページを見ていて、もしかしたら漫画制作時のcmcファイルもsqlite3のデータなんじゃないかと思い、sqliteに通してみたら案の定sqlite3のデータベースファイルになっていた。

97fd553a212f1691a1a87d99134e495e56b2b8db.png

ページ順の取得

テーブルが存在するということは各clip/lipファイルを指し示す部分があるはずという事でCanvasNodeを見てみると、LinkPathに「ディレクトリ相対パスっぽいの:ファイル名」という形式で含まれているのが判ったため、CanvasNodeで順番さえとれれば、参考ページにあるようなサムネール抽出をページ順に名前付けして出せそうだという事が判った。

しかし、ナイーブツリーなパターンだったので一発で抽出するには再帰クエリが必要だった。

仕様っぽいの

  1. LinkPathがNULLのデータがツリールート
  2. ツリールートからはFirstChildIndexを参照して最初のページ情報を取得出来る。
  3. _PW_IDではなくMainIdが各インデックス参照に利用されている。
  4. 2ページ目以降はNextIndexが次のページ情報を指し示している。
  5. NextIndexが0になったら最終ページ

ただし、単純な漫画用データを見た結果なのでこれで全て扱えるかというと多分違う。

実験

example.sql
WITH RECURSIVE r2 AS (
    WITH RECURSIVE r1 AS (
        SELECT CanvasNode.* FROM CanvasNode WHERE NextIndex = 0 AND LinkPath is NULL
        UNION ALL
        SELECT CanvasNode.* FROM CanvasNode, r1 WHERE CanvasNode.MainId = r1.FirstChildIndex
    )
    SELECT * FROM r1
    UNION ALL
    SELECT CanvasNode.* FROM CanvasNode, r2 WHERE CanvasNode.MainId = r2.NextIndex
)
SELECT LinkPath FROM r2 WHERE LinkPath IS NOT NULL;

a3228bf6da71fb1c01afbe9910bf9502eeaa74b9.png

画像のクエリでは一部_PW_ID見てるけど、たまたま_PW_IDMainIdが同じレコードを指してたので大丈夫だった。

各clip/lipファイルから画像を抜く

とりあえず実験の為、参考ページにあった画像抽出コマンドを書いておく。

sqlite3 page0010.lip "SELECT quote(ImageData) FROM CanvasPreview" | cut -d\' -f2 | xxd -r -p > page10.png

コマンドでやる場合は直接SELECTしても上手く通らないのでquoteで16進数文字列に変換してからシングルクオートを取り除いたものをバイナリに戻してファイルにリダイレクトしてるのか。なるほど。

879ae88d18ba959f113fec4d3d8d04f6f6beda35.png

a9cb9c090087547f6d13e65701981c9486f20fde.png

雑感

なにか作りたい。golangで。

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ariela
はいぱーへたれえんじにあ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?