{"componentChunkName":"component---src-templates-post-js","path":"/post/misskey_backupandrestore/","result":{"data":{"ghostPost":{"childHtmlRehype":{"html":"<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://zenn.dev/ssks_sn/articles/555f9807940010?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Docker-composeで構築したmisskeyサーバーをCloudflareR2にバックアップ＆リストアする</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://static.zenn.studio/images/logo-transparent.png\" alt=\"\"><span class=\"kg-bookmark-author\">Zenn</span><span class=\"kg-bookmark-publisher\">ちん</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://res.cloudinary.com/zenn/image/upload/s--o1p8rZn_--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Docker-compose%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9Fmisskey%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92CloudflareR2%E3%81%AB%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%86%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2%E3%81%99%E3%82%8B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%E3%81%A1%E3%82%93%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzgwYTY3ZWZiMmEuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png\" alt=\"\"></div></a></figure><p>これの焼き増し</p>\n<h1 id=\"%E7%B5%90%E8%AB%96\">結論</h1>\n<p>バックアップ（シェルスクリプト）</p>\n<pre><code>#!/bin/bash\n\nSERVICE_NAME=\"db\"\n\nPOSTGRES_DB=\"misskey\"\nPOSTGRES_PASSWORD=\"postgrespassword\"\nPOSTGRES_USER=\"postgresuser\"\n\nBUCKET_NAME=\"bucketname\"\nAWS_USER=\"awsuser\"\nYOUR_R2_ID=\"r2id\"\n\nDB_DUMP_FILE=`date \"+%Y%m%d\"`-misskeybk\n\ndocker-compose exec $SERVICE_NAME pg_dumpall -U $POSTGRES_USER > ../backup/$DB_DUMP_FILE\n\ngzip ../backup/$DB_DUMP_FILE\n\naws s3 mv ../backup/${DB_DUMP_FILE}.gz s3://${BUCKET_NAME} --profile $AWS_USER --endpoint-url https://${YOUR_R2_ID}.r2.cloudflarestorage.com\n</code></pre>\n<p>リストア<br>\n<code>{DUMP_FILE}</code>はバックアップしたファイル名　他の変数はバックアップのものを読み替えること</p>\n<pre><code class=\"language-bash\">BUCKET_NAME=\"bucketname\"\n\naws s3 cp s3://{BUCKET_NAME}/{DUMP_FILE}.gz ../backup --profile {AWS_USER} --endpoint-url https://{YOUR_R2_ID}.r2.cloudflarestorage.com\n\n# {DUMP_FILE}.gzのあるディレクトリで\ngunzip {DUMP_FILE}.gz\n\n# misskey関係のdocker-compose.ymlのあるディレクトリで\ndocker-compose up -d db\n\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -c 'DROP DATABASE ${POSTGRES_DB};'\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -c 'CREATE DATABASE ${POSTGRES_DB};'\n\n# {container_id}を調べる\ndocker ps\n\ndocker cp ../backup/{DUMP_FILE}.db {container_id}:/db.dump\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -f /db.dump\n\nrm ../backup/*\n</code></pre>\n<h1 id=\"%E8%AA%AC%E6%98%8E\">説明</h1>\n<h2 id=\"%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97\">バックアップ</h2>\n<p>前提としてaws-cliをインストールしていること　あと適当なtempディレクトリがあること（ここではひとつ上の階層にbackupを置いている）<br>\ndocker-composeで直接postgresにアクセスしてpf_dumpallでデータベースをダンプしてgzipで圧縮してaws-cliでCloudflareR2に作成したbucketにアップロードしています<br>\nなので<code>SERVICE_NAME</code>から<code>POSTGRES_USER</code>はそれぞれdocker-compose.ymlやdocker.envのものを使うこと<br>\n<code>DB_DUMP_FILE</code>は一日毎にバックアップを取ることを想定して日付で命名<br>\nあとはcronなどで定期的に実行するだけ！</p>\n<h2 id=\"%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2\">リストア</h2>\n<p>環境で若干操作が異なると思う<br>\n一応動作確認済み🤗</p>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://girak.net/2022/06/03/300?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">VPSにDockerでMisskeyを立てていろいろあった話 - GirakBlog</div><div class=\"kg-bookmark-description\">2022年6月3日 2022年6月3日 こんにちはきろたです 突然ですが先日 ぎらくMisskey支部 を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://girak.net/wp-content/uploads/2022/04/cropped-giraklogo2-270x270.png\" alt=\"\"><span class=\"kg-bookmark-author\">GirakBlog</span><span class=\"kg-bookmark-publisher\">白月 きろた</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://girak.net/wp-content/uploads/2022/06/image.png\" alt=\"\"></div></a></figure><p>上記のような環境でセットアップしたとする</p>\n<p>まずCloudflareR2からdumpファイルをダウンロードしてgunzipで解凍、docker-compose up -d dbでmisskey以外のコンテナを起動してからPostgresのdbを一度削除して再構成する<br>\ndocker内にダウンロードしたダンプファイルを導入してpsqlでリストア</p>\n<p>ちなみにdocker-composeのときにmisskeyも起動すると接続中とかで怒られるっぽい？<br>\nあとdbを削除して再構成しないと色々重複してリストアがうまくいかない</p>\n<h1 id=\"%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">参考文献</h1>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://misskey-doc.7ka.org/ja/nakkaa/online-backup-postgresql?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Postgresqlのデータをバックアップする(docker compose)</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://misskey-doc.7ka.org/_assets/favicons/android-chrome-192x192.png\" alt=\"\"><span class=\"kg-bookmark-author\">Misskey鯖缶Wiki</span></div></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://zenn.dev/okayurisotto/articles/d85ad4602007bf?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Docker Composeで構築したMisskeyサーバーのデータベースをバックアップ＆リストアする</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://static.zenn.studio/images/logo-transparent.png\" alt=\"\"><span class=\"kg-bookmark-author\">Zenn</span><span class=\"kg-bookmark-publisher\">おかゆりぞっと</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://res.cloudinary.com/zenn/image/upload/s--0f9Ps-k---/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Docker%20Compose%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9FMisskey%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%86%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2%E3%81%99%E3%82%8B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%E3%81%8A%E3%81%8B%E3%82%86%E3%82%8A%E3%81%9E%E3%81%A3%E3%81%A8%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzJiOWIzMjQwMDYuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png\" alt=\"\"></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://girak.net/2022/06/03/300?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">VPSにDockerでMisskeyを立てていろいろあった話 - GirakBlog</div><div class=\"kg-bookmark-description\">2022年6月3日 2022年6月3日 こんにちはきろたです 突然ですが先日 ぎらくMisskey支部 を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://girak.net/wp-content/uploads/2022/04/cropped-giraklogo2-270x270.png\" alt=\"\"><span class=\"kg-bookmark-author\">GirakBlog</span><span class=\"kg-bookmark-publisher\">白月 きろた</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://girak.net/wp-content/uploads/2022/06/image.png\" alt=\"\"></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://qiita.com/ryome/items/efd37c3a49b54859ba68?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">【Windows/Mac/Linux（Ubuntu）】AWS CLIインストール方法 - Qiita</div><div class=\"kg-bookmark-description\">AWS CLIインストール方法【Windows】インストーラをダウンロードするインストーラAWSCLIV2.msi をダブルクリックして起動Next を押下するI accept the t…</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://cdn.qiita.com/assets/favicons/public/apple-touch-icon-ec5ba42a24ae923f16825592efdc356f.png\" alt=\"\"><span class=\"kg-bookmark-author\">Qiita</span><span class=\"kg-bookmark-publisher\">ryome</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&#x26;w=1200&#x26;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgwJTkwV2luZG93cyUyRk1hYyUyRkxpbnV4JUVGJUJDJTg4VWJ1bnR1JUVGJUJDJTg5JUUzJTgwJTkxQVdTJTIwQ0xJJUUzJTgyJUE0JUUzJTgzJUIzJUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgzJUJDJUUzJTgzJUFCJUU2JTk2JUI5JUU2JUIzJTk1JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz05NWJiMGNmMTZiMTM0ZjhjMjQ2YmI3ZWFmOTQ3MTFiNw&#x26;mark-x=142&#x26;mark-y=112&#x26;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwcnlvbWUmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWZlYzliMzY3N2Q3YWE5ZWMwYzZjZmMwYjllMGRjMWIx&#x26;blend-x=142&#x26;blend-y=491&#x26;blend-mode=normal&#x26;s=ade493e2bc1d43e4cc5a06fb58357133\" alt=\"\"></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://blog.denet.co.jp/install-the-aws-cli-and-download-the-s3-file/?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">【Windows10】AWS CLIを導入してS3のファイルをダウンロードする。</div><div class=\"kg-bookmark-description\">この記事ではWindows10にてAWS コマンドラインインターフェイス (AWS CLI)をインストールし環境変数やプロファイルを設定した後、実際にS3からファイルをダウンロードする手順を紹介します。記事の流れについては目次を参照していただければと思います。</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://blog.denet.co.jp/wp-content/uploads/2020/07/favicon.ico\" alt=\"\"><span class=\"kg-bookmark-author\">DENET 技術ブログ</span><span class=\"kg-bookmark-publisher\">chiyoda</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://blog.denet.co.jp/wp-content/uploads/2020/07/AWS.png\" alt=\"\"></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://www.postgresql.jp/document/8.1/html/backup.html?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">バックアップとリストア</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"></div></div></a></figure>","tableOfContents":[{"id":"%E7%B5%90%E8%AB%96","heading":"結論"},{"id":"%E8%AA%AC%E6%98%8E","heading":"説明","items":[{"id":"%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97","heading":"バックアップ"},{"id":"%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2","heading":"リストア"}]},{"id":"%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE","heading":"参考文献"}]},"tags":[{"accent_color":null,"name":"技術","slug":"tech","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"accent_color":"#9EC23F","name":"misskey","slug":"misskey","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"accent_color":"#116796","name":"PostgreSQL","slug":"postgresql","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"accent_color":"#F2801F","name":"Cloudflare","slug":"cloudflare","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"accent_color":"#0196E4","name":"Docker","slug":"docker","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"}],"primary_author":{"location":"北海道","name":"ssks","slug":"ssks","bio":"平素よりお世話になっております","profile_image":"https://ghostmedia.ssks-ss.com/content/images/2023/12/----------2023-11-20-004315-1.jpg","twitter":"@Sn50Tin","facebook":null,"website":"https://www.pixiv.net/users/25391430,https://www.nicovideo.jp/user/31837529"},"feature_image_caption":null,"id":"Ghost__Post__6586d0c77718c600015a1052","title":"Docker-composeで構築したmisskeyサーバーをCloudflareR2にバックアップ＆リストアする","slug":"misskey_backupandrestore","featured":false,"feature_image":"https://res-3.cloudinary.com/ddrr1fpam/image/upload/q_auto/v1/blog-images/----------2023-12-21-174647.jpg","excerpt":"Docker-composeで構築したmisskeyサーバーをCloudflareR2にバックアップ＆リストアするZennちん\n\nこれの焼き増し\n\n\n\n結論\n\n\nバックアップ（シェルスクリプト）\n\n\n#!/bin/bash\n\nSERVICE_NAME=\"db\"\n\nPOSTGRES_DB=\"misskey\"\nPOSTGRES_PASSWORD=\"postgrespassword\"\nPOSTGRES_USER=\"postgresuser\"\n\nBUCKET_NAME=\"bucketname\"\nAWS_USER=\"awsuser\"\nYOUR_R2_ID=\"r2id\"\n\nDB_DUMP_FILE=`date \"+%Y%m%d\"`-misskeybk\n\ndocker-compose exec $SERVICE_NAME pg_dumpall -U $POSTGRES_USER > ../backup/$DB_DUMP_FILE\n\ngzip ../backup/$DB_DUMP_FILE\n\naws s3 mv ../backup/${DB_DUMP_FILE}.gz s3://${BUCKET_NA","custom_excerpt":null,"visibility":"public","created_at_pretty":"21 December, 2023","published_at_pretty":"21 December, 2023","updated_at_pretty":"24 December, 2023","created_at":"2023-12-21T17:45:55.000+09:00","published_at":"2023-12-21T17:53:38.000+09:00","updated_at":"2023-12-24T23:37:23.000+09:00","meta_title":null,"meta_description":null,"og_description":null,"og_image":null,"og_title":null,"twitter_description":null,"twitter_image":null,"twitter_title":null,"authors":[{"name":"ssks","slug":"ssks","bio":"平素よりお世話になっております","profile_image":"https://ghostmedia.ssks-ss.com/content/images/2023/12/----------2023-11-20-004315-1.jpg","twitter":"@Sn50Tin","facebook":null,"website":"https://www.pixiv.net/users/25391430,https://www.nicovideo.jp/user/31837529"}],"primary_tag":{"name":"技術","slug":"tech","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},"plaintext":"Docker-composeで構築したmisskeyサーバーをCloudflareR2にバックアップ＆リストアするZennちん\n\nこれの焼き増し\n\n\n\n結論\n\n\nバックアップ（シェルスクリプト）\n\n\n#!/bin/bash\n\nSERVICE_NAME=\"db\"\n\nPOSTGRES_DB=\"misskey\"\nPOSTGRES_PASSWORD=\"postgrespassword\"\nPOSTGRES_USER=\"postgresuser\"\n\nBUCKET_NAME=\"bucketname\"\nAWS_USER=\"awsuser\"\nYOUR_R2_ID=\"r2id\"\n\nDB_DUMP_FILE=`date \"+%Y%m%d\"`-misskeybk\n\ndocker-compose exec $SERVICE_NAME pg_dumpall -U $POSTGRES_USER > ../backup/$DB_DUMP_FILE\n\ngzip ../backup/$DB_DUMP_FILE\n\naws s3 mv ../backup/${DB_DUMP_FILE}.gz s3://${BUCKET_NAME} --profile $AWS_USER --endpoint-url https://${YOUR_R2_ID}.r2.cloudflarestorage.com\n\n\n\nリストア\n\n{DUMP_FILE}はバックアップしたファイル名　他の変数はバックアップのものを読み替えること\n\n\nBUCKET_NAME=\"bucketname\"\n\naws s3 cp s3://{BUCKET_NAME}/{DUMP_FILE}.gz ../backup --profile {AWS_USER} --endpoint-url https://{YOUR_R2_ID}.r2.cloudflarestorage.com\n\n# {DUMP_FILE}.gzのあるディレクトリで\ngunzip {DUMP_FILE}.gz\n\n# misskey関係のdocker-compose.ymlのあるディレクトリで\ndocker-compose up -d db\n\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -c 'DROP DATABASE ${POSTGRES_DB};'\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -c 'CREATE DATABASE ${POSTGRES_DB};'\n\n# {container_id}を調べる\ndocker ps\n\ndocker cp ../backup/{DUMP_FILE}.db {container_id}:/db.dump\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -f /db.dump\n\nrm ../backup/*\n\n\n\n\n説明\n\n\n\nバックアップ\n\n\n前提としてaws-cliをインストールしていること　あと適当なtempディレクトリがあること（ここではひとつ上の階層にbackupを置いている）\n\ndocker-composeで直接postgresにアクセスしてpf_dumpallでデータベースをダンプしてgzipで圧縮してaws-cliでCloudflareR2に作成したbucketにアップロードしています\n\nなのでSERVICE_NAMEからPOSTGRES_USERはそれぞれdocker-compose.ymlやdocker.envのものを使うこと\n\nDB_DUMP_FILEは一日毎にバックアップを取ることを想定して日付で命名\n\nあとはcronなどで定期的に実行するだけ！\n\n\n\nリストア\n\n\n環境で若干操作が異なると思う\n\n一応動作確認済み🤗\n\n\nVPSにDockerでMisskeyを立てていろいろあった話 - GirakBlog2022年6月3日 2022年6月3日 こんにちはきろたです 突然ですが先日 ぎらくMisskey支部 を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。GirakBlog白月 きろた\n\n上記のような環境でセットアップしたとする\n\n\nまずCloudflareR2からdumpファイルをダウンロードしてgunzipで解凍、docker-compose up -d dbでmisskey以外のコンテナを起動してからPostgresのdbを一度削除して再構成する\n\ndocker内にダウンロードしたダンプファイルを導入してpsqlでリストア\n\n\nちなみにdocker-composeのときにmisskeyも起動すると接続中とかで怒られるっぽい？\n\nあとdbを削除して再構成しないと色々重複してリストアがうまくいかない\n\n\n\n参考文献\n\n\nPostgresqlのデータをバックアップする(docker compose)Misskey鯖缶WikiDocker Composeで構築したMisskeyサーバーのデータベースをバックアップ＆リストアするZennおかゆりぞっとVPSにDockerでMisskeyを立てていろいろあった話 - GirakBlog2022年6月3日 2022年6月3日 こんにちはきろたです 突然ですが先日 ぎらくMisskey支部 を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。GirakBlog白月 きろた【Windows/Mac/Linux（Ubuntu）】AWS CLIインストール方法 - QiitaAWS CLIインストール方法【Windows】インストーラをダウンロードするインストーラAWSCLIV2.msi をダブルクリックして起動Next を押下するI accept the t…Qiitaryome【Windows10】AWS CLIを導入してS3のファイルをダウンロードする。この記事ではWindows10にてAWS コマンドラインインターフェイス (AWS CLI)をインストールし環境変数やプロファイルを設定した後、実際にS3からファイルをダウンロードする手順を紹介します。記事の流れについては目次を参照していただければと思います。DENET 技術ブログchiyodaバックアップとリストア","html":"<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://zenn.dev/ssks_sn/articles/555f9807940010?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Docker-composeで構築したmisskeyサーバーをCloudflareR2にバックアップ＆リストアする</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://static.zenn.studio/images/logo-transparent.png\" alt><span class=\"kg-bookmark-author\">Zenn</span><span class=\"kg-bookmark-publisher\">ちん</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://res.cloudinary.com/zenn/image/upload/s--o1p8rZn_--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Docker-compose%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9Fmisskey%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92CloudflareR2%E3%81%AB%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%86%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2%E3%81%99%E3%82%8B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%E3%81%A1%E3%82%93%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzgwYTY3ZWZiMmEuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png\" alt></div></a></figure><p>これの焼き増し</p>\n<h1 id=\"%E7%B5%90%E8%AB%96\">結論</h1>\n<p>バックアップ（シェルスクリプト）</p>\n<pre><code>#!/bin/bash\n\nSERVICE_NAME=\"db\"\n\nPOSTGRES_DB=\"misskey\"\nPOSTGRES_PASSWORD=\"postgrespassword\"\nPOSTGRES_USER=\"postgresuser\"\n\nBUCKET_NAME=\"bucketname\"\nAWS_USER=\"awsuser\"\nYOUR_R2_ID=\"r2id\"\n\nDB_DUMP_FILE=`date \"+%Y%m%d\"`-misskeybk\n\ndocker-compose exec $SERVICE_NAME pg_dumpall -U $POSTGRES_USER &gt; ../backup/$DB_DUMP_FILE\n\ngzip ../backup/$DB_DUMP_FILE\n\naws s3 mv ../backup/${DB_DUMP_FILE}.gz s3://${BUCKET_NAME} --profile $AWS_USER --endpoint-url https://${YOUR_R2_ID}.r2.cloudflarestorage.com\n</code></pre>\n<p>リストア<br>\n<code>{DUMP_FILE}</code>はバックアップしたファイル名　他の変数はバックアップのものを読み替えること</p>\n<pre><code class=\"language-bash\">BUCKET_NAME=\"bucketname\"\n\naws s3 cp s3://{BUCKET_NAME}/{DUMP_FILE}.gz ../backup --profile {AWS_USER} --endpoint-url https://{YOUR_R2_ID}.r2.cloudflarestorage.com\n\n# {DUMP_FILE}.gzのあるディレクトリで\ngunzip {DUMP_FILE}.gz\n\n# misskey関係のdocker-compose.ymlのあるディレクトリで\ndocker-compose up -d db\n\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -c 'DROP DATABASE ${POSTGRES_DB};'\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -c 'CREATE DATABASE ${POSTGRES_DB};'\n\n# {container_id}を調べる\ndocker ps\n\ndocker cp ../backup/{DUMP_FILE}.db {container_id}:/db.dump\ndocker-compose exec -T db psql -U $POSTGRES_USER -d $POSTGRES_DB -f /db.dump\n\nrm ../backup/*\n</code></pre>\n<h1 id=\"%E8%AA%AC%E6%98%8E\">説明</h1>\n<h2 id=\"%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97\">バックアップ</h2>\n<p>前提としてaws-cliをインストールしていること　あと適当なtempディレクトリがあること（ここではひとつ上の階層にbackupを置いている）<br>\ndocker-composeで直接postgresにアクセスしてpf_dumpallでデータベースをダンプしてgzipで圧縮してaws-cliでCloudflareR2に作成したbucketにアップロードしています<br>\nなので<code>SERVICE_NAME</code>から<code>POSTGRES_USER</code>はそれぞれdocker-compose.ymlやdocker.envのものを使うこと<br>\n<code>DB_DUMP_FILE</code>は一日毎にバックアップを取ることを想定して日付で命名<br>\nあとはcronなどで定期的に実行するだけ！</p>\n<h2 id=\"%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2\">リストア</h2>\n<p>環境で若干操作が異なると思う<br>\n一応動作確認済み🤗</p>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://girak.net/2022/06/03/300?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">VPSにDockerでMisskeyを立てていろいろあった話 - GirakBlog</div><div class=\"kg-bookmark-description\">2022年6月3日 2022年6月3日 こんにちはきろたです 突然ですが先日 ぎらくMisskey支部 を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://girak.net/wp-content/uploads/2022/04/cropped-giraklogo2-270x270.png\" alt><span class=\"kg-bookmark-author\">GirakBlog</span><span class=\"kg-bookmark-publisher\">白月 きろた</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://girak.net/wp-content/uploads/2022/06/image.png\" alt></div></a></figure><p>上記のような環境でセットアップしたとする</p>\n<p>まずCloudflareR2からdumpファイルをダウンロードしてgunzipで解凍、docker-compose up -d dbでmisskey以外のコンテナを起動してからPostgresのdbを一度削除して再構成する<br>\ndocker内にダウンロードしたダンプファイルを導入してpsqlでリストア</p>\n<p>ちなみにdocker-composeのときにmisskeyも起動すると接続中とかで怒られるっぽい？<br>\nあとdbを削除して再構成しないと色々重複してリストアがうまくいかない</p>\n<h1 id=\"%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">参考文献</h1>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://misskey-doc.7ka.org/ja/nakkaa/online-backup-postgresql?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Postgresqlのデータをバックアップする(docker compose)</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://misskey-doc.7ka.org/_assets/favicons/android-chrome-192x192.png\" alt><span class=\"kg-bookmark-author\">Misskey鯖缶Wiki</span></div></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://zenn.dev/okayurisotto/articles/d85ad4602007bf?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Docker Composeで構築したMisskeyサーバーのデータベースをバックアップ＆リストアする</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://static.zenn.studio/images/logo-transparent.png\" alt><span class=\"kg-bookmark-author\">Zenn</span><span class=\"kg-bookmark-publisher\">おかゆりぞっと</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://res.cloudinary.com/zenn/image/upload/s--0f9Ps-k---/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Docker%20Compose%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9FMisskey%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%86%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2%E3%81%99%E3%82%8B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%E3%81%8A%E3%81%8B%E3%82%86%E3%82%8A%E3%81%9E%E3%81%A3%E3%81%A8%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzJiOWIzMjQwMDYuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://girak.net/2022/06/03/300?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">VPSにDockerでMisskeyを立てていろいろあった話 - GirakBlog</div><div class=\"kg-bookmark-description\">2022年6月3日 2022年6月3日 こんにちはきろたです 突然ですが先日 ぎらくMisskey支部 を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://girak.net/wp-content/uploads/2022/04/cropped-giraklogo2-270x270.png\" alt><span class=\"kg-bookmark-author\">GirakBlog</span><span class=\"kg-bookmark-publisher\">白月 きろた</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://girak.net/wp-content/uploads/2022/06/image.png\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://qiita.com/ryome/items/efd37c3a49b54859ba68?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">【Windows/Mac/Linux（Ubuntu）】AWS CLIインストール方法 - Qiita</div><div class=\"kg-bookmark-description\">AWS CLIインストール方法【Windows】インストーラをダウンロードするインストーラAWSCLIV2.msi をダブルクリックして起動Next を押下するI accept the t…</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://cdn.qiita.com/assets/favicons/public/apple-touch-icon-ec5ba42a24ae923f16825592efdc356f.png\" alt><span class=\"kg-bookmark-author\">Qiita</span><span class=\"kg-bookmark-publisher\">ryome</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&amp;w=1200&amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgwJTkwV2luZG93cyUyRk1hYyUyRkxpbnV4JUVGJUJDJTg4VWJ1bnR1JUVGJUJDJTg5JUUzJTgwJTkxQVdTJTIwQ0xJJUUzJTgyJUE0JUUzJTgzJUIzJUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgzJUJDJUUzJTgzJUFCJUU2JTk2JUI5JUU2JUIzJTk1JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz05NWJiMGNmMTZiMTM0ZjhjMjQ2YmI3ZWFmOTQ3MTFiNw&amp;mark-x=142&amp;mark-y=112&amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwcnlvbWUmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWZlYzliMzY3N2Q3YWE5ZWMwYzZjZmMwYjllMGRjMWIx&amp;blend-x=142&amp;blend-y=491&amp;blend-mode=normal&amp;s=ade493e2bc1d43e4cc5a06fb58357133\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://blog.denet.co.jp/install-the-aws-cli-and-download-the-s3-file/?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">【Windows10】AWS CLIを導入してS3のファイルをダウンロードする。</div><div class=\"kg-bookmark-description\">この記事ではWindows10にてAWS コマンドラインインターフェイス (AWS CLI)をインストールし環境変数やプロファイルを設定した後、実際にS3からファイルをダウンロードする手順を紹介します。記事の流れについては目次を参照していただければと思います。</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://blog.denet.co.jp/wp-content/uploads/2020/07/favicon.ico\" alt><span class=\"kg-bookmark-author\">DENET 技術ブログ</span><span class=\"kg-bookmark-publisher\">chiyoda</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://blog.denet.co.jp/wp-content/uploads/2020/07/AWS.png\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://www.postgresql.jp/document/8.1/html/backup.html?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">バックアップとリストア</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"></div></div></a></figure>","url":"https://ghost.ssks-ss.com/misskey_backupandrestore/","canonical_url":null,"uuid":"4c077094-417a-40d1-8e17-7c45bbbb5694","page":null,"codeinjection_foot":null,"codeinjection_head":null,"codeinjection_styles":null,"comment_id":"6583fb43ec7fd7067c977c12","reading_time":4},"relatepost":{"edges":[{"node":{"id":"Ghost__Post__692dbf382ba9e10001ff15ad","title":"彩度合成モードはなにを合成しているのか？","slug":"08","featured":false,"feature_image":"https://ghostmedia.ssks-ss.com/content/images/2025/12/----------2025-12-02-022020.jpg","excerpt":"背景\n\n\nClipStudioやphotoshopには彩度合成モードがあるが　公式ガイドやらTipsやらhtmlベタ打ちのサイトを参照しても基本的な説明は\n\n\n\n\n\n下のレイヤーの輝度と色相を維持したまま、上のレイヤーの彩度にします。\n\n\n\nといった文言もしくは説明自体がなく　具体的な計算式が出てこない\n\n\nこの記述から素直に推測できるのはHSL色空間上の輝度　色相　彩度を用いて処理する方法だが\n\n実際に試すと正しくないとわかる\n\n\n\n\n\n基本色\n合成色\n結果色\n\n\n\n\n(0,50,50)\n(0,95,50)\n(0,100,57)\n\n\n(0,50,50)\n(0,80,50)\n(0,91,56)\n\n\n(0,50,50)\n(0,10,50)\n(0,12,42)\n\n\n(0,50,50)\n(0,0,50)\n(0,0,40)\n\n\n(0,50,50)\n(0,25,50)\n(0,28,45)\n\n\n(0,50,50)\n(0,100,50)\n(0,100,57)\n\n\n\n\n\n(H:色相[°], S:彩度[％], L:輝度[％])\n\n\n一方phothoshopについての説明だが　ここにあるようにRGB値の最","custom_excerpt":null,"visibility":"public","created_at_pretty":"01 December, 2025","published_at_pretty":"03 December, 2025","updated_at_pretty":"05 December, 2025","created_at":"2025-12-02T01:15:52.000+09:00","published_at":"2025-12-03T22:44:20.000+09:00","updated_at":"2025-12-05T20:53:40.000+09:00","meta_title":null,"meta_description":null,"og_description":null,"og_image":null,"og_title":null,"twitter_description":null,"twitter_image":null,"twitter_title":null,"authors":[{"name":"ssks","slug":"ssks","bio":"平素よりお世話になっております","profile_image":"https://ghostmedia.ssks-ss.com/content/images/2023/12/----------2023-11-20-004315-1.jpg","twitter":"@Sn50Tin","facebook":null,"website":"https://www.pixiv.net/users/25391430,https://www.nicovideo.jp/user/31837529"}],"primary_author":{"name":"ssks","slug":"ssks","bio":"平素よりお世話になっております","profile_image":"https://ghostmedia.ssks-ss.com/content/images/2023/12/----------2023-11-20-004315-1.jpg","twitter":"@Sn50Tin","facebook":null,"website":"https://www.pixiv.net/users/25391430,https://www.nicovideo.jp/user/31837529"},"primary_tag":{"name":"技術","slug":"tech","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},"tags":[{"name":"技術","slug":"tech","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"彩度","slug":"cai-du","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"クリスタ","slug":"kurisuta","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"合成モード","slug":"he-cheng-modo","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"}],"plaintext":"背景\n\n\nClipStudioやphotoshopには彩度合成モードがあるが　公式ガイドやらTipsやらhtmlベタ打ちのサイトを参照しても基本的な説明は\n\n\n\n\n\n下のレイヤーの輝度と色相を維持したまま、上のレイヤーの彩度にします。\n\n\n\nといった文言もしくは説明自体がなく　具体的な計算式が出てこない\n\n\nこの記述から素直に推測できるのはHSL色空間上の輝度　色相　彩度を用いて処理する方法だが\n\n実際に試すと正しくないとわかる\n\n\n\n\n\n基本色\n合成色\n結果色\n\n\n\n\n(0,50,50)\n(0,95,50)\n(0,100,57)\n\n\n(0,50,50)\n(0,80,50)\n(0,91,56)\n\n\n(0,50,50)\n(0,10,50)\n(0,12,42)\n\n\n(0,50,50)\n(0,0,50)\n(0,0,40)\n\n\n(0,50,50)\n(0,25,50)\n(0,28,45)\n\n\n(0,50,50)\n(0,100,50)\n(0,100,57)\n\n\n\n\n\n(H:色相[°], S:彩度[％], L:輝度[％])\n\n\n一方phothoshopについての説明だが　ここにあるようにRGB値の最大値と最小値の差を最大値で割った彩度を用いるのも（非線形で扱いにくそうなので）おそらく正しくない\n\n\nどのパラメータを合成しているか気になったのでこの計算を推定した（=合成を再現した）\n\n\nサンプルデータ等はClipStudioで取得\n\n\n\n結論\n\n\n彩度合成は以下の3つのルールにより計算される\n\n\n・彩度合成モードは一度RGB色空間からYCbCr空間へ線形変換を行い輝度であるY値と、独自に定義されかつ表示されないパラメータである色相と彩度の計3つのパラメータを用いている・彩度合成モードは下のレイヤーのYである輝度、CbCrから導出された色相を保持し、上のレイヤーのCbCrからから導出された彩度をそのまま結果色として出力する・ただし、下のレイヤーによって指定された色相と輝度からとりうる彩度の範囲から上のレイヤーから導出された彩度が外れた場合、結果色の彩度は下のレイヤーによって指定されたとりうる彩度に最も近い値をとる\n\n\n説明\n\n\nひとつずつ見ていく\n\n\n・彩度合成モードは一度RGB色空間からYCbCr色空間へ線形変換を行った上で、輝度であるY値と、独自に定義されかつ表示されないパラメータである色相と彩度の計3つのパラメータを用いている\n\n前提としてRGB色空間とYCbCr色空間とその相互変換について\n\n\n・RGB色空間はほとんどのPC上の色表現に用いられる色空間である\n\n\nRは赤　Gは緑　Bは青とした三要素から色を表現する色空間でありそれぞれの値域は$[0,255]$となる\n\n\n・YCbCr色空間は映像信号などの処理に用いられる色空間である\n\n\nYは輝度　Cbは青方向色差　Crは赤方向色差とした三要素から色を表現する色空間でありそれぞれの値域は$[0,255] [-127.5,127.5] [-127.5,127.5]$となる（ただし実際の信号処理においては符号化により$[0,255]$となる）\n\n\n・RGBからYCbCrへの変換は特定の係数行列をかけて線形的に行われる　逆変換も同様\n\n\nその変換式は以下で定義される(wikiからの引用値)\n\n\n$$\n\\begin{pmatrix}\nY \\\\\nCb \\\\\nCr\n\\end{pmatrix}\n=\n\\begin{pmatrix}\n0.299 & 0.587 & 0.114 \\\\\n-0.168736 & -0.331264 & 0.5 \\\\\n0.5 & -0.418688 & -0.081312\n\\end{pmatrix}\n\\begin{pmatrix}\nR \\\\\nG \\\\\nB\n\\end{pmatrix} \\\\\\\\\n\\begin{pmatrix}\nR \\\\\nG \\\\\nB\n\\end{pmatrix}\n=\n\\begin{pmatrix}\n1 & 0 & 1.402 \\\\\n1 & -0.344136 & -0.714136 \\\\\n1 & 1.1772 & 0\n\\end{pmatrix}\n\\begin{pmatrix}\nY \\\\\nCb \\\\\nCr\n\\end{pmatrix}\n\n$$\n\n\n\nこれはいわゆるITU-R BT.601規格でありこの係数行列は規格により異なることに留意する\n\n\n次に用いられる3つのパラメータ：輝度　彩度　色相について\n\n\nこれらはすべてYCbCr色空間上で定義される\n\n\n輝度について：YCbCr色空間のYの値\n\n実際にRGB画像をYCbCrに変換してYのみをグレースケールで表示すると白黒画像になる\n\n\nRGB値に人間の色認識に応じた加重平均をとるためヒトの分光視感効率に応じた白黒画像を得られる\n\n\n彩度と色相について：Y-Cb-Crはそれぞれ直交するのでCb-Crを複素数平面としたときの偏角を色相とし大きさを彩度とする\n\n\nこうすることで色相は360°で定義される（計算上はラジアンになるが）\n\n\n・彩度合成モードは下のレイヤーのYである輝度、CbCrから導出された色相を保持し、上のレイヤーのCbCrからから導出された彩度をそのまま結果色として出力する\n\n1つめのルールも含め具体的な計算式を追って確認していく\n\n\nまず下のレイヤーのRGB値$RGB_b$を変換して$Y_b,Cb_b,Cr_b$を得る\n\n\n同様に上のレイヤーのRGB値$RGB_c$を変換して$Y_c,Cb_c,Cr_c$を得る\n\n\n次に結果色の輝度($L$)　色相($H$)　彩度($S$)を計算する\n\n\n輝度と色相は下のレイヤーのものを使うので\n\n\n$$\nL = Y_b\\\\\nH = arg(Cb_b+Cr_bi)\n$$\n\n\n\n彩度は上のレイヤーのものを使うので\n\n\n$$\nS = \\sqrt{Cb_c^2 + Cr_c^2}\n$$\n\n\n\nこの時結果色の$YC_bC_r$はそれぞれ戻して\n\n\n$$\nY = L = Y_b\\\\\nCb = Scos(H)\\\\\nCr = Ssin(H)\n$$\n\n\n\nとなる\n\n\nこれをRGBへ逆変換すると結果色$RGB_r$が得られる　ということ\n\n\n・ただし、下のレイヤーによって指定された色相と輝度からとりうる彩度の範囲から上のレイヤーから導出された彩度が外れた場合、結果色の彩度は下のレイヤーによって指定されたとりうる彩度に最も近い値をとる\n\nこれが一番めんどくさいルール\n\n\n先ほどの計算では\n\n$$\n\nRGB \\to YCbCr \\to RGB\n\n$$\n\nとして結果色を求めるが　この$YCbCr \\to RGB$の変換\n\nの際にRGBの値域から外れることがある（飽和する）\n\n\nその対応として彩度を最大限維持するためにとることのできる彩度うち最も近い値をとっているということ\n\n\n式を追うためにまず$YCbCr \\to RGB$を輝度$L$　彩度$S$　色相$H$を用いて整理する　添え字はそれぞれRGBのどれから求められた値かを示す\n\n\n$$\n\\begin{cases} \nR=Y+1.402Cr\\\\\nG=Y−0.344136Cb−0.714136Cr\\\\\nB=Y+1.772Cb\n\\end{cases} \\\\\nS_R = \\dfrac{R-L}{1.402sin(H)}\\\\\nS_G = \\dfrac{G-L}{-0.344136cos(H)-0.714136sin(H)}\\\\\nS_B = \\dfrac{B-L}{1.772cos(H)}\n$$\n\n\n\nRGBの値域は$[0,255]$であることとRGBの係数の正負が分母の符号で決まることを考慮すれば\n\n\nそれぞれの分母の符号が正のとき：\n\n\n$$\n\\dfrac{-L}{1.402sin(H)}≤S_R≤\\dfrac{255-L}{1.402sin(H)}\\\\\n\\dfrac{-L}{-0.344136cos(H)-0.714136sin(H)}≤S_G≤\\dfrac{255-L}{-0.344136cos(H)-0.714136sin(H)}\\\\\n\\dfrac{-L}{1.772cos(H)}≤S_B≤\\dfrac{255-L}{1.772cos(H)}\n$$\n\n\n\nとなりそれぞれの分母の符号が負のときは大小関係は逆になる\n\n\nこの様に求めた各範囲の共通部分に彩度$S$が入っていないとき最も近い値を採用するということ\n\n\n\n実際に逐次計算してみる\n\n\n計算するとわかりやすいので以下の組み合わせで結果色を計算から求めてみる\n\n\n\n\n\n基本色($RGB_b$)\n合成色($RGB_c$)\n結果色($RGB_r$)\n\n\n\n\n(80,74,48)\n(239,223,143)\n(93,76,0)\n\n\n\n\n\n表記は(R, G, B)\n\n\n計算が面倒なので変換の係数行列は4ケタにする\n\n添え字は$b$が下のレイヤー,$c$が上のレイヤー,結果色が$r$としている\n\n\nまずはそれぞれのRGBをYCbCrへ変換\n\n\n$$\nY_b = 0.299\\cdot80+0.587\\cdot74+0.114\\cdot48 = 72.83\\\\\nCb_b = -0.1687\\cdot80-0.3312\\cdot74+0.5\\cdot48 = -14.00\\\\\nCr_b = 0.5\\cdot80-0.4187\\cdot74-0.08131\\cdot48 = 5.113\\\\\\\\\nY_c = 0.299\\cdot239+0.587\\cdot223+0.114\\cdot143 = 218.7\\\\\nCb_c = -0.1687\\cdot239-0.3312\\cdot223+0.5\\cdot143 = -42.68\\\\\nCr_c = 0.5\\cdot239-0.4187\\cdot223-0.08131\\cdot143 = 14.50\\\\\n$$\n\n\n\n次に輝度($L$)色相($H$)を求める\n\n$L$と$H$は下のレイヤーから求められるので\n\n\n$$\nL = Y_b = 72.83\\\\\nH = arg(Cb_b+Cr_bi) = arg(-14.00+5.113i) = 2.791\n$$\n\n\n\n得られた$L$と$H$からとりうる$S$の最大値を求めておく\n\n\n$$\n-151.2 = \\dfrac{L}{1.402sin(H)}≤S_R≤\\dfrac{255-L}{1.402sin(H)} = 378.3\\\\\n-934.5 = \\dfrac{L}{-0.344136cos(H)-0.714136sin(H)}≤S_G≤\\dfrac{255-L}{-0.344136cos(H)-0.714136sin(H)} = 2337\\\\\n-109.4 = \\dfrac{255-L}{1.772cos(H)} ≤ S_B ≤ \\dfrac{L}{1.772cos(H)} = 43.76\n$$\n\n\n\nこれの共通するSの範囲は$[-109.4,43.76]$\n\n\n一方で上のレイヤーから求められる彩度$S$は\n\n\n$$\nS = \\sqrt{Cb_c^2 + Cr_c^2} = \\sqrt{(-42.68)^2 + 14.50^2} = 45.08\n$$\n\n\n\nこれは取ることのできない値なので最も近い値である$S = 43.76$が採用される彩度となる\n\n\n結果色の$Y_r$,$Cb_r$,$Cr_r$はこれらの値から\n\n\n$$\nY_r = L = 72.83\\\\\nCb_r = Scos(H) = 43.76sin(2.791) = 15.02　\\\\\nCr_r = Ssin(H) = 43.76cos(2.791) = -41.10\n$$\n\n\n\nこれを逆変換すれば\n\n\n$$\nR=Y+1.402Cr = 72.83+1.402\\cdot15.02 = 93.88\\\\\nG=72.83-0.3441\\cdot-41.10-0.7141\\cdot15.02 = 76.25\\\\\nB=Y+1.772Cb = 72.83+1.772\\cdot-41.10 = 0.0008\n$$\n\n\n\nということで結果色は整数に丸めて(94,76,0)となり実際の値(93,76,0)とほぼ一致する\n\n\n\n終わり\n\n\nここまでの話を理解できれば他の色相や輝度の合成モードは結果色が上下レイヤーのどのパラメータを選び取るかの違いでしかないことがわかる\n\n\nまたグリザイユ画法で使われるカラー合成は上のレイヤーの色相と彩度を保持するとのこと　つまりグリザイユ画法は白黒の絵(=Y値画像)にカラー合成でCbCr平面上の色相と彩度を合成しているということがわかる\n\n\nさらに画像のY値化（輝度化）には色相や彩度やカラー合成モードで彩度ゼロの色調補正レイヤーを上に掛けるだけで行えることがわかる　これは彩度ゼロ=色相もゼロとなる（大きさゼロの複素数は偏角の定義ができない）ためである\n\n\nなぜドキュメントに計算式が記載されないかもわかった　四則演算のみで記述できない上に前提知識が必要で実用上知る必要がないため\n\n\n一方で問題は表示されない数字を使用しているということ　ClipStudioではHSLやHSV表示できるが合成モードの名前の印象とは違いそれぞれの色空間での値自体を保持するわけではないので直感に反するかもしれない　そもそも合成モードのリストの一番下にあることから実用性があまりないことを示唆しているが\n\n\nとはいえここまでの話は実際の挙動から推測した解釈なので合っていない可能性も普通にある　調べても出てこないので答え合わせもできない\n\n\n実際に関数を組んでみると誤差±1くらいにはなるので再現性は高いと思うが誤差の由来はよくわからない\n\nおそらくガンマ補正か小数点以下の切り捨て処理関係だと思われるが…\n\n\n\n色空間や画像処理や信号処理を調べるとデジタルイラストやデジタルモニタを用いた作業ひいては撮影や画像解析で意識すべき点がわかるのが楽しかった\n\n\n編集ソフトなどのよくわからない環境設定の項目は大抵こういう話に関係している　DTPなどにも関係するので知識を持っておくといいかもしれない\n\n\nこういう試行錯誤はやりたいことに対してどのような手法を取るかを考える上で結構重要だなと思う\n\n\nおわり\n\n\n\n参考資料\n\n\nYUV - Wikipediaウィキメディア財団ウィキメディアプロジェクトへの貢献者YCbCr ‐ 通信用語の基礎知識色空間の変換 (4)色覚の多様性と視覚バリアフリーなプレゼンテーション | 第2回　色覚が変化すると、どのように色が見えるのか？第2回　色覚が変化すると、どのように色が見えるのか？","html":"<h1 id=\"%E8%83%8C%E6%99%AF\">背景</h1>\n<p>ClipStudioやphotoshopには彩度合成モードがあるが　<a href=\"https://help.clip-studio.com/ja-jp/manual_jp/180_layers/%E5%90%88%E6%88%90%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B.htm?ref=ghost.ssks-ss.com\">公式ガイド</a>やら<a href=\"https://tips.clip-studio.com/ja-jp/articles/4163?ref=ghost.ssks-ss.com#f556cd60\">Tips</a>やら<a href=\"https://www.fbs.osaka-u.ac.jp/labs/ishijima/Photoshop-01.html?ref=ghost.ssks-ss.com\">htmlベタ打ちのサイト</a>を参照しても基本的な説明は</p>\n<blockquote>\n<p>下のレイヤーの輝度と色相を維持したまま、上のレイヤーの彩度にします。</p>\n</blockquote>\n<p>といった文言もしくは説明自体がなく　具体的な計算式が出てこない</p>\n<p>この記述から素直に推測できるのはHSL色空間上の輝度　色相　彩度を用いて処理する方法だが<br>\n実際に試すと正しくないとわかる</p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align:center\">基本色</th>\n<th style=\"text-align:center\">合成色</th>\n<th style=\"text-align:center\">結果色</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:center\">(0,50,50)  <div style=\"width:75%; height:10px; background:hsl(0, 50%, 50%); margin:0 auto;\" 　></div></td>\n<td style=\"text-align:center\">(0,95,50)  <div style=\"width:75%; height:10px; background:hsl(0, 95%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,100,57)<div style=\"width:75%; height:10px; background:hsl(0, 100%, 57%); margin:0 auto;\"></div></td>\n</tr>\n<tr>\n<td style=\"text-align:center\">(0,50,50)<div style=\"width:75%; height:10px; background:hsl(0, 50%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,80,50)<div style=\"width:75%; height:10px; background:hsl(0, 80%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,91,56)<div style=\"width:75%; height:10px; background:hsl(0, 91%, 56%); margin:0 auto;\"></div></td>\n</tr>\n<tr>\n<td style=\"text-align:center\">(0,50,50)<div style=\"width:75%; height:10px; background:hsl(0, 50%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,10,50)<div style=\"width:75%; height:10px; background:hsl(0, 10%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,12,42)<div style=\"width:75%; height:10px; background:hsl(0, 12%, 42%); margin:0 auto;\"></div></td>\n</tr>\n<tr>\n<td style=\"text-align:center\">(0,50,50)<div style=\"width:75%; height:10px; background:hsl(0, 50%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,0,50)<div style=\"width:75%; height:10px; background:hsl(0, 0%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,0,40)<div style=\"width:75%; height:10px; background:hsl(0, 0%, 40%); margin:0 auto;\"></div></td>\n</tr>\n<tr>\n<td style=\"text-align:center\">(0,50,50)<div style=\"width:75%; height:10px; background:hsl(0, 50%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,25,50)<div style=\"width:75%; height:10px; background:hsl(0, 25%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,28,45)<div style=\"width:75%; height:10px; background:hsl(0, 28%, 45%); margin:0 auto;\"></div></td>\n</tr>\n<tr>\n<td style=\"text-align:center\">(0,50,50)<div style=\"width:75%; height:10px; background:hsl(0, 50%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,100,50)<div style=\"width:75%; height:10px; background:hsl(0, 100%, 50%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(0,100,57)<div style=\"width:75%; height:10px; background:hsl(0, 100%, 57%); margin:0 auto;\"></div></td>\n</tr>\n</tbody>\n</table>\n<p>(H:色相[°], S:彩度[％], L:輝度[％])</p>\n<p>一方phothoshopについての説明だが　<a href=\"https://ns.ofo.jp/osakana/cgtips/blendmode.phtml?ref=ghost.ssks-ss.com\">ここ</a>にあるようにRGB値の最大値と最小値の差を最大値で割った彩度を用いるのも（非線形で扱いにくそうなので）おそらく正しくない</p>\n<p>どのパラメータを合成しているか気になったのでこの<strong>計算を推定した（=合成を再現した）</strong></p>\n<p>サンプルデータ等はClipStudioで取得</p>\n<h1 id=\"%E7%B5%90%E8%AB%96\">結論</h1>\n<p>彩度合成は以下の3つのルールにより計算される</p>\n<div class=\"kg-card kg-callout-card kg-callout-card-pink\"><div class=\"kg-callout-text\">・彩度合成モードは一度RGB色空間からYCbCr空間へ線形変換を行い輝度であるY値と、独自に定義されかつ表示されないパラメータである色相と彩度の計3つのパラメータを用いている</div></div><div class=\"kg-card kg-callout-card kg-callout-card-pink\"><div class=\"kg-callout-text\">・彩度合成モードは下のレイヤーのYである輝度、CbCrから導出された色相を保持し、上のレイヤーのCbCrからから導出された彩度をそのまま結果色として出力する</div></div><div class=\"kg-card kg-callout-card kg-callout-card-pink\"><div class=\"kg-callout-text\">・ただし、下のレイヤーによって指定された色相と輝度からとりうる彩度の範囲から上のレイヤーから導出された彩度が外れた場合、結果色の彩度は下のレイヤーによって指定されたとりうる彩度に最も近い値をとる</div></div><h1 id=\"%E8%AA%AC%E6%98%8E\">説明</h1>\n<p>ひとつずつ見ていく</p>\n<div class=\"kg-card kg-callout-card kg-callout-card-pink\"><div class=\"kg-callout-text\">・彩度合成モードは一度RGB色空間からYCbCr色空間へ線形変換を行った上で、輝度であるY値と、独自に定義されかつ表示されないパラメータである色相と彩度の計3つのパラメータを用いている</div></div><p>前提としてRGB色空間とYCbCr色空間とその相互変換について</p>\n<p>・RGB色空間はほとんどのPC上の色表現に用いられる色空間である</p>\n<p>Rは赤　Gは緑　Bは青とした三要素から色を表現する色空間でありそれぞれの値域は$[0,255]$となる</p>\n<p>・YCbCr色空間は映像信号などの処理に用いられる色空間である</p>\n<p>Yは輝度　Cbは青方向色差　Crは赤方向色差とした三要素から色を表現する色空間でありそれぞれの値域は$[0,255] [-127.5,127.5] [-127.5,127.5]$となる（ただし実際の信号処理においては符号化により$[0,255]$となる）</p>\n<p>・RGBからYCbCrへの変換は特定の係数行列をかけて線形的に行われる　逆変換も同様</p>\n<p>その変換式は以下で定義される(wikiからの引用値)</p>\n<pre><code>$$\n\\begin{pmatrix}\nY \\\\\nCb \\\\\nCr\n\\end{pmatrix}\n=\n\\begin{pmatrix}\n0.299 &amp; 0.587 &amp; 0.114 \\\\\n-0.168736 &amp; -0.331264 &amp; 0.5 \\\\\n0.5 &amp; -0.418688 &amp; -0.081312\n\\end{pmatrix}\n\\begin{pmatrix}\nR \\\\\nG \\\\\nB\n\\end{pmatrix} \\\\\\\\\n\\begin{pmatrix}\nR \\\\\nG \\\\\nB\n\\end{pmatrix}\n=\n\\begin{pmatrix}\n1 &amp; 0 &amp; 1.402 \\\\\n1 &amp; -0.344136 &amp; -0.714136 \\\\\n1 &amp; 1.1772 &amp; 0\n\\end{pmatrix}\n\\begin{pmatrix}\nY \\\\\nCb \\\\\nCr\n\\end{pmatrix}\n\n$$\n</code></pre>\n<p>これはいわゆるITU-R BT.601規格でありこの係数行列は規格により異なることに留意する</p>\n<p>次に用いられる3つのパラメータ：輝度　彩度　色相について</p>\n<p>これらはすべてYCbCr色空間上で定義される</p>\n<p>輝度について：YCbCr色空間のYの値<br>\n実際にRGB画像をYCbCrに変換してYのみをグレースケールで表示すると白黒画像になる</p>\n<p>RGB値に人間の色認識に応じた加重平均をとるためヒトの分光視感効率に応じた白黒画像を得られる</p>\n<p>彩度と色相について：Y-Cb-Crはそれぞれ直交するのでCb-Crを複素数平面としたときの偏角を色相とし大きさを彩度とする</p>\n<p>こうすることで色相は360°で定義される（計算上はラジアンになるが）</p>\n<div class=\"kg-card kg-callout-card kg-callout-card-pink\"><div class=\"kg-callout-text\">・彩度合成モードは下のレイヤーのYである輝度、CbCrから導出された色相を保持し、上のレイヤーのCbCrからから導出された彩度をそのまま結果色として出力する</div></div><p>1つめのルールも含め具体的な計算式を追って確認していく</p>\n<p>まず下のレイヤーのRGB値$RGB_b$を変換して$Y_b,Cb_b,Cr_b$を得る</p>\n<p>同様に上のレイヤーのRGB値$RGB_c$を変換して$Y_c,Cb_c,Cr_c$を得る</p>\n<p>次に結果色の輝度($L$)　色相($H$)　彩度($S$)を計算する</p>\n<p>輝度と色相は下のレイヤーのものを使うので</p>\n<pre><code>$$\nL = Y_b\\\\\nH = arg(Cb_b+Cr_bi)\n$$\n</code></pre>\n<p>彩度は上のレイヤーのものを使うので</p>\n<pre><code>$$\nS = \\sqrt{Cb_c^2 + Cr_c^2}\n$$\n</code></pre>\n<p>この時結果色の$YC_bC_r$はそれぞれ戻して</p>\n<pre><code>$$\nY = L = Y_b\\\\\nCb = Scos(H)\\\\\nCr = Ssin(H)\n$$\n</code></pre>\n<p>となる</p>\n<p>これをRGBへ逆変換すると結果色$RGB_r$が得られる　ということ</p>\n<div class=\"kg-card kg-callout-card kg-callout-card-pink\"><div class=\"kg-callout-text\">・ただし、下のレイヤーによって指定された色相と輝度からとりうる彩度の範囲から上のレイヤーから導出された彩度が外れた場合、結果色の彩度は下のレイヤーによって指定されたとりうる彩度に最も近い値をとる</div></div><p>これが一番めんどくさいルール</p>\n<p>先ほどの計算では<br>\n$$<br>\nRGB  \\to YCbCr \\to RGB<br>\n$$<br>\nとして結果色を求めるが　この$YCbCr \\to RGB$の変換<br>\nの際にRGBの値域から外れることがある（飽和する）</p>\n<p>その対応として彩度を最大限維持するためにとることのできる彩度うち最も近い値をとっているということ</p>\n<p>式を追うためにまず$YCbCr \\to RGB$を輝度$L$　彩度$S$　色相$H$を用いて整理する　添え字はそれぞれRGBのどれから求められた値かを示す</p>\n<pre><code>$$\n\\begin{cases} \nR=Y+1.402Cr\\\\\nG=Y−0.344136Cb−0.714136Cr\\\\\nB=Y+1.772Cb\n\\end{cases} \\\\\nS_R = \\dfrac{R-L}{1.402sin(H)}\\\\\nS_G = \\dfrac{G-L}{-0.344136cos(H)-0.714136sin(H)}\\\\\nS_B = \\dfrac{B-L}{1.772cos(H)}\n$$\n</code></pre>\n<p>RGBの値域は$[0,255]$であることとRGBの係数の正負が分母の符号で決まることを考慮すれば</p>\n<p>それぞれの分母の符号が正のとき：</p>\n<pre><code>$$\n\\dfrac{-L}{1.402sin(H)}≤S_R≤\\dfrac{255-L}{1.402sin(H)}\\\\\n\\dfrac{-L}{-0.344136cos(H)-0.714136sin(H)}≤S_G≤\\dfrac{255-L}{-0.344136cos(H)-0.714136sin(H)}\\\\\n\\dfrac{-L}{1.772cos(H)}≤S_B≤\\dfrac{255-L}{1.772cos(H)}\n$$\n</code></pre>\n<p>となりそれぞれの分母の符号が負のときは大小関係は逆になる</p>\n<p>この様に求めた各範囲の共通部分に彩度$S$が入っていないとき最も近い値を採用するということ</p>\n<h2 id=\"%E5%AE%9F%E9%9A%9B%E3%81%AB%E9%80%90%E6%AC%A1%E8%A8%88%E7%AE%97%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B\">実際に逐次計算してみる</h2>\n<p>計算するとわかりやすいので以下の組み合わせで結果色を計算から求めてみる</p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align:center\">基本色($RGB_b$)</th>\n<th style=\"text-align:center\">合成色($RGB_c$)</th>\n<th style=\"text-align:center\">結果色($RGB_r$)</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:center\">(80,74,48)<div style=\"width:75%; height:10px; background:hsl(49, 25%, 25%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(239,223,143)<div style=\"width:75%; height:10px; background:hsl(50, 75%, 75%); margin:0 auto;\"></div></td>\n<td style=\"text-align:center\">(93,76,0)<div style=\"width:75%; height:10px; background:hsl(49, 100%, 18%); margin:0 auto;\"></div></td>\n</tr>\n</tbody>\n</table>\n<p>表記は(R, G, B)</p>\n<p>計算が面倒なので変換の係数行列は4ケタにする<br>\n添え字は$b$が下のレイヤー,$c$が上のレイヤー,結果色が$r$としている</p>\n<p>まずはそれぞれのRGBをYCbCrへ変換</p>\n<pre><code>$$\nY_b = 0.299\\cdot80+0.587\\cdot74+0.114\\cdot48 = 72.83\\\\\nCb_b = -0.1687\\cdot80-0.3312\\cdot74+0.5\\cdot48 = -14.00\\\\\nCr_b = 0.5\\cdot80-0.4187\\cdot74-0.08131\\cdot48 = 5.113\\\\\\\\\nY_c = 0.299\\cdot239+0.587\\cdot223+0.114\\cdot143 = 218.7\\\\\nCb_c = -0.1687\\cdot239-0.3312\\cdot223+0.5\\cdot143 = -42.68\\\\\nCr_c = 0.5\\cdot239-0.4187\\cdot223-0.08131\\cdot143 = 14.50\\\\\n$$\n</code></pre>\n<p>次に輝度($L$)色相($H$)を求める<br>\n$L$と$H$は下のレイヤーから求められるので</p>\n<pre><code>$$\nL = Y_b = 72.83\\\\\nH = arg(Cb_b+Cr_bi) = arg(-14.00+5.113i) = 2.791\n$$\n</code></pre>\n<p>得られた$L$と$H$からとりうる$S$の最大値を求めておく</p>\n<pre><code>$$\n-151.2 = \\dfrac{L}{1.402sin(H)}≤S_R≤\\dfrac{255-L}{1.402sin(H)} = 378.3\\\\\n-934.5 = \\dfrac{L}{-0.344136cos(H)-0.714136sin(H)}≤S_G≤\\dfrac{255-L}{-0.344136cos(H)-0.714136sin(H)} = 2337\\\\\n-109.4 = \\dfrac{255-L}{1.772cos(H)} ≤ S_B ≤ \\dfrac{L}{1.772cos(H)} = 43.76\n$$\n</code></pre>\n<p>これの共通するSの範囲は$[-109.4,43.76]$</p>\n<p>一方で上のレイヤーから求められる彩度$S$は</p>\n<pre><code>$$\nS = \\sqrt{Cb_c^2 + Cr_c^2} = \\sqrt{(-42.68)^2 + 14.50^2} = 45.08\n$$\n</code></pre>\n<p>これは取ることのできない値なので最も近い値である$S = 43.76$が採用される彩度となる</p>\n<p>結果色の$Y_r$,$Cb_r$,$Cr_r$はこれらの値から</p>\n<pre><code>$$\nY_r = L = 72.83\\\\\nCb_r = Scos(H) = 43.76sin(2.791) = 15.02　\\\\\nCr_r = Ssin(H) = 43.76cos(2.791) = -41.10\n$$\n</code></pre>\n<p>これを逆変換すれば</p>\n<pre><code>$$\nR=Y+1.402Cr = 72.83+1.402\\cdot15.02 = 93.88\\\\\nG=72.83-0.3441\\cdot-41.10-0.7141\\cdot15.02 = 76.25\\\\\nB=Y+1.772Cb = 72.83+1.772\\cdot-41.10 = 0.0008\n$$\n</code></pre>\n<p>ということで結果色は整数に丸めて(94,76,0)となり実際の値(93,76,0)とほぼ一致する</p>\n<h1 id=\"%E7%B5%82%E3%82%8F%E3%82%8A\">終わり</h1>\n<p>ここまでの話を理解できれば他の色相や輝度の合成モードは結果色が上下レイヤーのどのパラメータを選び取るかの違いでしかないことがわかる</p>\n<p>またグリザイユ画法で使われるカラー合成は上のレイヤーの色相と彩度を保持するとのこと　つまりグリザイユ画法は白黒の絵(=Y値画像)にカラー合成でCbCr平面上の色相と彩度を合成しているということがわかる</p>\n<p>さらに画像のY値化（輝度化）には色相や彩度やカラー合成モードで彩度ゼロの色調補正レイヤーを上に掛けるだけで行えることがわかる　これは彩度ゼロ=色相もゼロとなる（大きさゼロの複素数は偏角の定義ができない）ためである</p>\n<p>なぜドキュメントに計算式が記載されないかもわかった　四則演算のみで記述できない上に前提知識が必要で実用上知る必要がないため</p>\n<p>一方で問題は表示されない数字を使用しているということ　ClipStudioではHSLやHSV表示できるが合成モードの名前の印象とは違いそれぞれの色空間での値自体を保持するわけではないので直感に反するかもしれない　そもそも合成モードのリストの一番下にあることから実用性があまりないことを示唆しているが</p>\n<p>とはいえここまでの話は実際の挙動から推測した解釈なので合っていない可能性も普通にある　調べても出てこないので答え合わせもできない</p>\n<p>実際に関数を組んでみると誤差±1くらいにはなるので再現性は高いと思うが誤差の由来はよくわからない<br>\nおそらくガンマ補正か小数点以下の切り捨て処理関係だと思われるが…</p>\n<hr>\n<p>色空間や画像処理や信号処理を調べるとデジタルイラストやデジタルモニタを用いた作業ひいては撮影や画像解析で意識すべき点がわかるのが楽しかった</p>\n<p>編集ソフトなどのよくわからない環境設定の項目は大抵こういう話に関係している　DTPなどにも関係するので知識を持っておくといいかもしれない</p>\n<p>こういう試行錯誤はやりたいことに対してどのような手法を取るかを考える上で結構重要だなと思う</p>\n<p>おわり</p>\n<h1 id=\"%E5%8F%82%E8%80%83%E8%B3%87%E6%96%99\">参考資料</h1>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://ja.wikipedia.org/wiki/YUV?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">YUV - Wikipedia</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://ja.wikipedia.org/static/apple-touch/wikipedia.png\" alt><span class=\"kg-bookmark-author\">ウィキメディア財団</span><span class=\"kg-bookmark-publisher\">ウィキメディアプロジェクトへの貢献者</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/YUV_UV_plane.svg/1200px-YUV_UV_plane.svg.png\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://www.wdic.org/w/WDIC/YCbCr?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">YCbCr ‐ 通信用語の基礎知識</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://www.wdic.org/favicon.ico\" alt></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://www.wdic.org/image/kisomark.png\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://fujiwaratko.sakura.ne.jp/infosci/colorspace/colorspace4.html?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">色空間の変換 (4)</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://fujiwaratko.sakura.ne.jp/favicon.ico\" alt></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://fujiwaratko.sakura.ne.jp/infosci/colorspace/ohigashi.jpg\" alt></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://www.nig.ac.jp/color/barrierfree/barrierfree2-6.html?ref=ghost.ssks-ss.com#c15\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">色覚の多様性と視覚バリアフリーなプレゼンテーション | 第2回　色覚が変化すると、どのように色が見えるのか？</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://t1.gstatic.com/faviconV2?client=SOCIAL&amp;type=FAVICON&amp;fallback_opts=TYPE,SIZE,URL&amp;url=https://www.nig.ac.jp/color/barrierfree/barrierfree2-6.html&amp;size=16\" alt><span class=\"kg-bookmark-author\">第2回　色覚が変化すると、どのように色が見えるのか？</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://www.nig.ac.jp/color/barrierfree/images/logo_saibou.gif\" alt></div></a></figure>","url":"https://ghost.ssks-ss.com/08/","canonical_url":null,"uuid":"cd0114c6-d9b6-40e7-a555-92282658463f","page":null,"codeinjection_foot":null,"codeinjection_head":null,"codeinjection_styles":null,"comment_id":"692dbf382ba9e10001ff15ad","reading_time":7}},{"node":{"id":"Ghost__Post__65ff228dd6364c0001761da5","title":"ファイトクラブへようこそ","slug":"welcometofightclub","featured":false,"feature_image":"https://ghostmedia.ssks-ss.com/content/images/2024/03/--_Insane_--_20240226---frame-at-2m22s-1.jpg","excerpt":"ファイトクラブへようこそファイトクラブへようこそ [エンターテイメント] なりたい自分になろうこの動画は投稿者によって修正されましたニコニコ動画ちん\n\n動画を投稿\n\n\n\n素材\n\n\nファイト・クラブです\n\n\n何度も見返したときに発見が常にあったり解釈が常に発生する作品は本当にすごい　特に時代の移り変わりにも対応していて素晴らしい\n\nこの映画かなりカット数が多くてスピード感があるのも昔の映画ながら今でも十分に印象が残る構成になっていて色々な意味で先取りをした映画だなと思います\n\nなにより若いころのブラットピットのビジュアルが相当に強い　常に画になる\n\n是非何度でも映画を観てください\n\n\nというか先達がいます　ちょうど原語版と吹替版で住み分けできてるんじゃないでしょうか　2017年が7年前なのびっくり\n\n\n\n動画\n\n\n結構前からAEを使ってるんですけど動画として投稿できるものでAEで作ったものってない\n\n\nこの動画の作成にあたって二つほどコードを書きました　コードを書くことにあんまり抵抗がなくなったのはいい傾向\n\nひとつ目はこれ\n\nこれは選択したレイヤーを設定したインターバルのフレーム数でラ","custom_excerpt":null,"visibility":"public","created_at_pretty":"23 March, 2024","published_at_pretty":"06 May, 2024","updated_at_pretty":"06 May, 2024","created_at":"2024-03-24T03:42:21.000+09:00","published_at":"2024-05-06T18:25:09.000+09:00","updated_at":"2024-05-06T18:37:27.000+09:00","meta_title":null,"meta_description":null,"og_description":null,"og_image":null,"og_title":null,"twitter_description":null,"twitter_image":null,"twitter_title":null,"authors":[{"name":"ssks","slug":"ssks","bio":"平素よりお世話になっております","profile_image":"https://ghostmedia.ssks-ss.com/content/images/2023/12/----------2023-11-20-004315-1.jpg","twitter":"@Sn50Tin","facebook":null,"website":"https://www.pixiv.net/users/25391430,https://www.nicovideo.jp/user/31837529"}],"primary_author":{"name":"ssks","slug":"ssks","bio":"平素よりお世話になっております","profile_image":"https://ghostmedia.ssks-ss.com/content/images/2023/12/----------2023-11-20-004315-1.jpg","twitter":"@Sn50Tin","facebook":null,"website":"https://www.pixiv.net/users/25391430,https://www.nicovideo.jp/user/31837529"},"primary_tag":{"name":"音mad","slug":"yin-mad","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},"tags":[{"name":"音mad","slug":"yin-mad","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"技術","slug":"tech","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"ブログ","slug":"blog","description":"語源はWeblogらしい","feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"ファイト・クラブ","slug":"huaitokurabu","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"破壊","slug":"po-huai","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"}],"plaintext":"ファイトクラブへようこそファイトクラブへようこそ [エンターテイメント] なりたい自分になろうこの動画は投稿者によって修正されましたニコニコ動画ちん\n\n動画を投稿\n\n\n\n素材\n\n\nファイト・クラブです\n\n\n何度も見返したときに発見が常にあったり解釈が常に発生する作品は本当にすごい　特に時代の移り変わりにも対応していて素晴らしい\n\nこの映画かなりカット数が多くてスピード感があるのも昔の映画ながら今でも十分に印象が残る構成になっていて色々な意味で先取りをした映画だなと思います\n\nなにより若いころのブラットピットのビジュアルが相当に強い　常に画になる\n\n是非何度でも映画を観てください\n\n\nというか先達がいます　ちょうど原語版と吹替版で住み分けできてるんじゃないでしょうか　2017年が7年前なのびっくり\n\n\n\n動画\n\n\n結構前からAEを使ってるんですけど動画として投稿できるものでAEで作ったものってない\n\n\nこの動画の作成にあたって二つほどコードを書きました　コードを書くことにあんまり抵抗がなくなったのはいい傾向\n\nひとつ目はこれ\n\nこれは選択したレイヤーを設定したインターバルのフレーム数でランダムに表示するスクリプト(UI付き)です　なんかランダムシード関数があんまりよくわからなくて機能してません　たすけて～～～\n\nこれはグランジ素材などののランダム描画に使いました　一日で完成\n\n\nふたつ目は以下\n\n\nimport os\nfrom PIL import Image\n\n# 画像があるディレクトリパス\ndirectory = './'\n\n# 新しいディレクトリの名前\nnew_directory_name = 'output_images'\n\n# 新しいディレクトリのパス\nnew_directory_path = os.path.join(directory, new_directory_name)\n\n# 新しいディレクトリを作成\nos.makedirs(new_directory_path, exist_ok=True)\n\n# ディレクトリ内のPNG画像を取得\npng_images = [f for f in os.listdir(directory) if f.endswith('.png')]\n\n# アルファチャンネルの多い順にソート\nsorted_images = sorted(png_images, key=lambda img: sum(1 for pixel in Image.open(os.path.join(directory, img)).convert(\"RGBA\").getdata() if pixel[3] == 0), reverse=True)\n\n# 書き出すファイル名のベース\noutput_base_name = 'output_'\n\n# 画像を書き出す\nfor i, image_name in enumerate(sorted_images, start=1):\n    image_path = os.path.join(directory, image_name)\n    img = Image.open(image_path)\n    output_name = f\"{output_base_name}{i}.png\"\n    output_path = os.path.join(new_directory_path, output_name)\n    img.save(output_path)\n\nprint(\"All images processed.\")\n\n\n\nこれはpng画像をアルファチャンネルのピクセル数にソートして新規ファイルに出力するpythonのコード　ffmpegとかでもできるんだろうな～\n\nもうローカルでしか使わないからめちゃくちゃ適当\n\nあと画像を各々走査して処理するから結構枚数があると遅い？py系の画像処理のライブラリよく知らないからまあできたからいいか…で終わりました\n\n\n作るにあたって152枚ほど画像を切り抜いたんですけどこれもphotoshopの自動化でかなり楽ができてよかった　これは標準機能でやりました\n\n全体的に暗くてコントラストが弱い映画だったため被写体選択だと割と漏れができてた\n\n選択範囲ツール内の自動選択ツールの方が精度が高いけど自動化できなくてちょっと面倒だった\n\n\n\n原曲\n\n\nInsaneProvided to YouTube by DistroKidInsane · Black Gryph0n · BaasikInsane℗ Black Gryph0n & BaasikReleased on: 2021-06-11Auto-generated by YouTube.YouTube\n\n原曲はInsane　アーティストはBlack Gryph0n＆Baasikです\n\nハズビンホテルという作品のラジオデーモンたるアラスターの非公式キャラソン\n\n\nアラスターは作中舞台の地獄において絶大な権能を持っていて　生前にはラジオアナウンサーと殺人鬼という二面性を持ったいわゆるサイコパスキャラ…ということらしい\n\n\nハズビンホテルは見たほうがいい　楽曲が粒ぞろいでお話もおもしろい　というか基本ミュージカル風？ラップバトルっぽくもあるけど\n\n大人向けのカートゥーンだなという感じ　特に日本だと成人女性向けという雰囲気がある\n\n人外ばっかだし倫理も破綻してるのでオススメ　下ネタも多いです\n\n\n\n他\n\n\n個人的にMIXTAPE -ラップ調音MAD-の特に竹塔さんのごちうさパートが音madに対する印象をかなり変えた作品だったのでこういう意識で音声と映像を合わせてうまく作ろうかなと思ってました\n\nこの動画押韻とか話の流れとかえげつない刻みとか映像構成とか全体のデザインとかほんとにすごい\n\n今の感覚からしてもマスターピースだよなとずっと思っています\n\n\nよく考えたらこうして文字書くのも着想は竹塔さんからなので最近の動向のルーツってかなり頼ってる節があるかも\n\n\nあとモニターによって（疑似だけど）グローの見た目が変わるのがすげー嫌だった\n\n結構前に絵描いてて気づいてたけど多分輝度か彩度かの閾値以下をなんらかの切り捨て処理してるっぽくて一定色域が正しく発色できてない…　なんで～～～\n\n\n\n私信\n\n\n最近はディーゼルエンジンに対して蒸留範囲の異なる燃料における燃焼特性を研究しています　おもしろい\n\nあと色々あって3000ドルくらい(45万円くらい？)を手に入れました　二輪免許が欲しいな～と　エアコンも欲しい…\n\n\nTo Be Kontinuedも行きました！　これマジで最高でした　体が勝手に動くって感覚を初めて覚えたかも\n\nこの時ばかりは運動部に所属してた経験が活きたなと思った\n\nデカい音で音madを聞く、これだけで普段使わない能領域をめちゃくちゃ刺激される\n\n完全に音madへの認識を塗り替えられました　クラブシーンで良さが最大限発揮されるという状況があるというのを認識できたのは大きい\n\n似たような部分では10選とか超晒しの生放送とかは似てる感じがある　なんだかんだ人が周りにいるというのも大事なのかも\n\notogrooveも相当盛り上がるでしょう！　完全新規の動画が流れるのであればまた違った雰囲気になるんだろうな～\n\n\n厚岸(一発で変換できない)も行きました　道東で太平洋側なのでめちゃくちゃ遠い　結局1000kmくらい運転しました\n\n\nバニーガーデンを酒飲んで複数人でやったりもした　胸が大きくて優しくてめちゃくちゃ良い子でちょっとスケベってあらゆる男性から人気だと思う\n\n\nあとはハンコも作ったりとか\n\n\n大きいのでも770円くらい？　安くて楽しいマイグッズ\n\nお近くのosmo設置店にて！\n\n\nいますぐつくれる わたしスタンプ OSMO オスモ｜シヤチハタどこでも・その場で・カンタンに 自分だけのオリジナルスタンプがつくれる、シヤチハタの新しいサービスOSMOを紹介します。いますぐつくれる わたしスタンプ OSMO オスモ｜シヤチハタ\n\n\n今後の目標としては作りかけの動画の完成と絵を描くというところ\n\n今年は去年よりはかなり時間的余裕がある感じなのでやる気次第！！！　やる気ってどうやって生み出すんだ～～～　オ～イ\n","html":"<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://www.nicovideo.jp/watch/sm43751872?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">ファイトクラブへようこそ</div><div class=\"kg-bookmark-description\">ファイトクラブへようこそ [エンターテイメント] なりたい自分になろうこの動画は投稿者によって修正されました</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://resource.video.nimg.jp/web/images/favicon/144.png\" alt><span class=\"kg-bookmark-author\">ニコニコ動画</span><span class=\"kg-bookmark-publisher\">ちん</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://img.cdn.nimg.jp/s/nicovideo/thumbnails/43751872/43751872.6530641.original/r1280x720l?key=01c2cd7b43bbf5144f0c913555a61d4a2d06508d639c2e570cdcc790232936f5\" alt></div></a></figure><p>動画を投稿</p>\n<h1 id=\"%E7%B4%A0%E6%9D%90\">素材</h1>\n<p>ファイト・クラブです</p>\n<p>何度も見返したときに発見が常にあったり解釈が常に発生する作品は本当にすごい　特に時代の移り変わりにも対応していて素晴らしい<br>\nこの映画かなりカット数が多くてスピード感があるのも昔の映画ながら今でも十分に印象が残る構成になっていて色々な意味で先取りをした映画だなと思います<br>\nなにより若いころのブラットピットのビジュアルが相当に強い　常に画になる<br>\n是非何度でも映画を観てください</p>\n<p>というか<a href=\"https://www.nicovideo.jp/watch/sm31263689?ref=ghost.ssks-ss.com\">先達</a>がいます　ちょうど原語版と吹替版で住み分けできてるんじゃないでしょうか　2017年が7年前なのびっくり</p>\n<h1 id=\"%E5%8B%95%E7%94%BB\">動画</h1>\n<p>結構前からAEを使ってるんですけど動画として投稿できるものでAEで作ったものってない</p>\n<p>この動画の作成にあたって二つほどコードを書きました　コードを書くことにあんまり抵抗がなくなったのはいい傾向<br>\nひとつ目は<a href=\"https://github.com/ssks-002/RandomDisplay/tree/main?ref=ghost.ssks-ss.com\">これ</a><br>\nこれは選択したレイヤーを設定したインターバルのフレーム数でランダムに表示するスクリプト(UI付き)です　なんかランダムシード関数があんまりよくわからなくて機能してません　たすけて～～～<br>\nこれはグランジ素材などののランダム描画に使いました　一日で完成</p>\n<p>ふたつ目は以下</p>\n<pre><code>import os\nfrom PIL import Image\n\n# 画像があるディレクトリパス\ndirectory = './'\n\n# 新しいディレクトリの名前\nnew_directory_name = 'output_images'\n\n# 新しいディレクトリのパス\nnew_directory_path = os.path.join(directory, new_directory_name)\n\n# 新しいディレクトリを作成\nos.makedirs(new_directory_path, exist_ok=True)\n\n# ディレクトリ内のPNG画像を取得\npng_images = [f for f in os.listdir(directory) if f.endswith('.png')]\n\n# アルファチャンネルの多い順にソート\nsorted_images = sorted(png_images, key=lambda img: sum(1 for pixel in Image.open(os.path.join(directory, img)).convert(\"RGBA\").getdata() if pixel[3] == 0), reverse=True)\n\n# 書き出すファイル名のベース\noutput_base_name = 'output_'\n\n# 画像を書き出す\nfor i, image_name in enumerate(sorted_images, start=1):\n    image_path = os.path.join(directory, image_name)\n    img = Image.open(image_path)\n    output_name = f\"{output_base_name}{i}.png\"\n    output_path = os.path.join(new_directory_path, output_name)\n    img.save(output_path)\n\nprint(\"All images processed.\")\n</code></pre>\n<p>これはpng画像をアルファチャンネルのピクセル数にソートして新規ファイルに出力するpythonのコード　ffmpegとかでもできるんだろうな～<br>\nもうローカルでしか使わないからめちゃくちゃ適当<br>\nあと画像を各々走査して処理するから結構枚数があると遅い？py系の画像処理のライブラリよく知らないからまあできたからいいか…で終わりました</p>\n<p>作るにあたって152枚ほど画像を切り抜いたんですけどこれもphotoshopの自動化でかなり楽ができてよかった　これは標準機能でやりました<br>\n全体的に暗くてコントラストが弱い映画だったため被写体選択だと割と漏れができてた<br>\n選択範囲ツール内の自動選択ツールの方が精度が高いけど自動化できなくてちょっと面倒だった</p>\n<h1 id=\"%E5%8E%9F%E6%9B%B2\">原曲</h1>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://www.youtube.com/watch?v=gFOJkIk8fcs&ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Insane</div><div class=\"kg-bookmark-description\">Provided to YouTube by DistroKidInsane · Black Gryph0n · BaasikInsane℗ Black Gryph0n &amp; BaasikReleased on: 2021-06-11Auto-generated by YouTube.</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://www.youtube.com/s/desktop/7c0eb0c2/img/favicon_144x144.png\" alt><span class=\"kg-bookmark-author\">YouTube</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://i.ytimg.com/vi/gFOJkIk8fcs/maxresdefault.jpg\" alt></div></a></figure><p>原曲はInsane　アーティストはBlack Gryph0n＆Baasikです<br>\nハズビンホテルという作品のラジオデーモンたるアラスターの非公式キャラソン</p>\n<p>アラスターは作中舞台の地獄において絶大な権能を持っていて　生前にはラジオアナウンサーと殺人鬼という二面性を持ったいわゆるサイコパスキャラ…ということらしい</p>\n<p>ハズビンホテルは見たほうがいい　楽曲が粒ぞろいでお話もおもしろい　というか基本ミュージカル風？ラップバトルっぽくもあるけど<br>\n大人向けのカートゥーンだなという感じ　特に日本だと成人女性向けという雰囲気がある<br>\n人外ばっかだし倫理も破綻してるのでオススメ　下ネタも多いです</p>\n<h1 id=\"%E4%BB%96\">他</h1>\n<p>個人的にMIXTAPE -ラップ調音MAD-の特に竹塔さんの<a href=\"https://www.nicovideo.jp/watch/sm38103007?ref=ghost.ssks-ss.com\">ごちうさパート</a>が音madに対する印象をかなり変えた作品だったのでこういう意識で音声と映像を合わせてうまく作ろうかなと思ってました<br>\nこの動画押韻とか話の流れとかえげつない刻みとか映像構成とか全体のデザインとかほんとにすごい<br>\n今の感覚からしてもマスターピースだよなとずっと思っています</p>\n<p>よく考えたらこうして文字書くのも着想は竹塔さんからなので最近の動向のルーツってかなり頼ってる節があるかも</p>\n<p>あとモニターによって（疑似だけど）グローの見た目が変わるのがすげー嫌だった<br>\n結構前に絵描いてて気づいてたけど多分輝度か彩度かの閾値以下をなんらかの切り捨て処理してるっぽくて一定色域が正しく発色できてない…　なんで～～～</p>\n<h1 id=\"%E7%A7%81%E4%BF%A1\">私信</h1>\n<p>最近はディーゼルエンジンに対して蒸留範囲の異なる燃料における燃焼特性を研究しています　おもしろい<br>\nあと色々あって3000ドルくらい(45万円くらい？)を手に入れました　二輪免許が欲しいな～と　エアコンも欲しい…</p>\n<p><a href=\"https://twitter.com/to6okegao/status/1771536875372622168?ref=ghost.ssks-ss.com\">To Be Kontinued</a>も行きました！　これマジで最高でした　体が勝手に動くって感覚を初めて覚えたかも<br>\nこの時ばかりは運動部に所属してた経験が活きたなと思った<br>\nデカい音で音madを聞く、これだけで普段使わない能領域をめちゃくちゃ刺激される<br>\n完全に音madへの認識を塗り替えられました　クラブシーンで良さが最大限発揮されるという状況があるというのを認識できたのは大きい<br>\n似たような部分では10選とか超晒しの生放送とかは似てる感じがある　なんだかんだ人が周りにいるというのも大事なのかも<br>\notogrooveも相当盛り上がるでしょう！　完全新規の動画が流れるのであればまた違った雰囲気になるんだろうな～</p>\n<p>厚岸(一発で変換できない)も行きました　道東で太平洋側なのでめちゃくちゃ遠い　結局1000kmくらい運転しました</p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img src=\"https://ghostmedia.ssks-ss.com/content/images/2024/05/20240506.jpg\" class=\"kg-image\" alt loading=\"lazy\" width=\"4032\" height=\"3024\"><figcaption><span style=\"white-space: pre-wrap;\">神グッズたち</span></figcaption></figure><p>バニーガーデンを酒飲んで複数人でやったりもした　胸が大きくて優しくてめちゃくちゃ良い子でちょっとスケベってあらゆる男性から人気だと思う</p>\n<p>あとはハンコも作ったりとか</p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img src=\"https://ghostmedia.ssks-ss.com/content/images/2024/05/20240506_2.jpg\" class=\"kg-image\" alt loading=\"lazy\" width=\"2843\" height=\"1879\"><figcaption><span style=\"white-space: pre-wrap;\">ちっちゃいサイズで赤インクのものが売り切れてました</span></figcaption></figure><p>大きいのでも770円くらい？　安くて楽しいマイグッズ<br>\nお近くのosmo設置店にて！</p>\n<figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://osmo-stamp.jp/?ref=ghost.ssks-ss.com\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">いますぐつくれる わたしスタンプ OSMO オスモ｜シヤチハタ</div><div class=\"kg-bookmark-description\">どこでも・その場で・カンタンに 自分だけのオリジナルスタンプがつくれる、シヤチハタの新しいサービスOSMOを紹介します。</div><div class=\"kg-bookmark-metadata\"><span class=\"kg-bookmark-author\">いますぐつくれる わたしスタンプ OSMO オスモ｜シヤチハタ</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://osmo-stamp.jp/ogp.png\" alt></div></a></figure><hr>\n<p>今後の目標としては作りかけの動画の完成と絵を描くというところ<br>\n今年は去年よりはかなり時間的余裕がある感じなのでやる気次第！！！　やる気ってどうやって生み出すんだ～～～　オ～イ</p>\n","url":"https://ghost.ssks-ss.com/welcometofightclub/","canonical_url":null,"uuid":"7497fbbc-55eb-4027-ab7e-d6c16d1dfd70","page":null,"codeinjection_foot":null,"codeinjection_head":null,"codeinjection_styles":null,"comment_id":"65ff228dd6364c0001761da5","reading_time":5}}]}},"pageContext":{"slug":"misskey_backupandrestore","tag":"tech","prev":{"primary_tag":{"slug":"blog"},"slug":"04","title":"激忙・忙忙忙・忙忙","year":"2023","month":"08"},"next":{"primary_tag":{"slug":"blog"},"slug":"2023-yeah","title":"2023年終了","year":"2023","month":"12"}}},"staticQueryHashes":["1752937443","2358152166","2561578252","2731221146","4145280475"]}