個人サイト制作:サイトマップへ戻る

X(旧:Twitter)のAIからイラストなどを守る試み

フェードアウト効果の草花写真

イーロン・マスクが開発中のAIは、Grokだけではありません。
彼のAI関連プロジェクトには他にもいくつかあります。
これらのAIは、それぞれ異なる目的と機能を持っており、マスク氏のビジョンに基づいて開発されています。

Grok
これはX(旧Twitter)で利用できる対話型AIで、xAI社が開発しました。
TruthGPT
これは「真実を追求するAI」として開発されているチャットボットで、xAI社のもう一つのプロジェクトです。

このようなAIから自分のイラストや文章などを守ろうと考えるなら、次のような方法が考えられます。
でもインターネットにアップロードしている以上、完璧にはならないかもしれません。

まずはTwitterの設定でAI学習をoffにする

真っ先に設定方法から手っ取り早く書きます。

AI学習設定をオフにする手順

  1. Xのサイドバーから「設定とプライバシー」をタップ
  2. 「プライバシーと安全」を選択
  3. 「Grok」をタップ
  4. チェックボックスをオフにする
フェードアウト効果の草花写真

これでAI学習をオフにすることができます。
この設定をオフにすることで、あなたの投稿やインタラクションがGrokなどのAIの学習に使用されないようにすることができます。
ただし、効果については議論がありますね…
設定をオフにすることで、AIがあなたのデータを直接学習に使用することは防げますが、完全に情報収集を防ぐことは難しいかもしれません。
設定をオフにしても、他のユーザーのデータや公開情報から間接的に学習する可能性だってあるのですから。

とはいえこの設定を行うことで、少なくとも直接的なデータ利用なら防ぐことができます。

AI学習からイラストを守る手順のまとめ

ご興味のある方は、ここだけ読んで頂ければ良いかも?
ざざっと箇条書きにしちゃいますよ。

フェードアウト効果の草花写真
Twitterの設定でAI学習をoffにする
これだけでもそれなりに違うと思います。
可視的ウォーターマークを入れる
効果が見込めるはず。楽しみながら作れますしね。
不可視的ウォーターマークを入れる
転載防止に効果を発揮するでしょうけど、複数のイラストに入力しようとすると手間ですね。

いろんなプラットフォームがあるので、手順を厳密に区分することは難しいです。
xfolioも素晴らしいプラットフォームですよね。
私のような個人サイト趣味勢から見ても、お勧めできるかと?!
とりあえず、ここまでは個人サイトがなくてもできることだと思います。

次は個人サイトを作れる、特にhtmlを始めとするソースコードを触れる方向けです。

フェードアウト効果の草花写真
個人サイトを制作する
クローラーの仕様はともかくとして、安寧を得られるという意味でもお勧めです。
CSSやJavaScriptみたいな難しい勉強は後回し!
robots.txtを設置する
これでクローラーは形式的にでも排除できます。
ステガノグラフィを使ってイラストに情報を埋め込む
上記の不可視的ウォーターマークの続きです。
プログラミングを視野に入れれば、一気に複数画像へ挿入できます。
イラストをスライスして掲載する
いよいよ大変かと…。
コードに慣れていて、プログラミングもできればスムーズに実装もできるでしょう。
イラストのメタデータに著作権情報を追加
複数画像かつ日本語入力しようとするとかなり面倒です。

私は繰り返される作業をプログラミングでやっつけるタイプです。
でもそれは「個人サイト」という文脈においては、非現実的だと言って良いと思います。
探せば気の利いたソフトウェアやウェブサイトビルダーがあると思うので、引き続き調べていきたいと思います。
私自身の勉強にもなるしね🎵

小説コンテンツでAI学習を阻止する工夫

いきなり結論から書いちゃうけど、小説ならPDFか画像にしてしまえば、生のテキストデータより収集がやりにくい状態にできると思われます。
いろんな対策を組み合わせればかなりマシになるかと。
少なくとも「字書きや小説は諦める」なんて…
私も子供の頃、ネット小説をいろいろ読んだりしましたよ?

例えば、次のように画像化してノイズを載せた文書なんてのはいかがでしょうか?
私が以前書いたゲームの攻略レポートを載せてみました。
これに加えてウォーターマーク付きでやればいいし、手間を惜しまないならAI学習妨害ツールを通しても良いですね。

アナザーエデンのハイエンドコンテンツ対策レポート

画像化する

PDFやテキストを画像形式に変換することで、OCRがテキストを認識しにくくなります。

PDFを画像に変換
PDFを開き、各ページをJPEGやPNGなどの画像形式で保存します。
PDF編集ソフトを使っても良いですし、Webサービスなどもありますよ。
解像度の調整
画像の解像度を適度に下げることで、OCRの精度をさらに低下させることができます。
あまり解像度を下げると読みにくくなりますが、限界まで解像度を落とせば良いでしょう。

テキストデータの画像化については、また後日プログラムや各種ツール類をご紹介します。
でも普通にググって頂ければいくらでも出てきますし、何ならスクリーンショットでも良いわけですよ。

テキストを歪ませる

テキストを少し歪ませたり、ノイズを加えたりすることで、OCRの精度を下げることができます。

画像編集ソフトを使用
PhotoshopやGIMPなどの画像編集ソフトを使って、テキストをわずかに回転させたり、波状に変形させたりします。
ノイズの追加
テキストの背景にランダムなノイズを加えることで、OCRがテキストを認識しにくくなります。
これも画像編集ソフトで簡単に行えます。

透かしを入れる

透かしを入れることで、OCRが正確にテキストを認識するのを妨げることができます。

透かしの作成
画像編集ソフトで透かしを作成します。透かしはテキストやロゴなど、透明度を調整したものが一般的です。
透かしの配置
透かしをテキストの上に重ねて配置します。透かしがテキストと重なることで、OCRがテキストを正確に読み取るのを妨げます。

これなんかまさに「小説に載せるウォーターマーク」ですよね。
イラストと同じ防御策が、小説でもやれちゃうわけです。

当サイトではPDFにしています

PDFでも良いと思いますよ?
生のテキストデータを公開しなければ、AI学習もやりにくくなります。
これにしても後日詳しく紹介しますが、例えばホーム(アナザーエデン グラスタの入手場所一覧)であったり、アナザーエデン:feinが書いたレポート集であったり。
ただ、OCR対策まではやっていませんけどね。
私の場合はむしろガンガンSEO対策の足しにしたいので。
でも創作をやる方々の事情は違います。
こういう形でPDF化なり画像化していただき、ウォーターマークまで付けていただければ、小説がAI学習やり放題なんてことにはならないでしょう。

OCRとはどういうものか

OCRは画像やスキャンされた文書からテキストを読み取り、デジタルデータに変換する技術です。 紙の文書や画像に含まれるテキストをコンピュータで編集、検索、保存することが可能になります。

OCRは次のように動作しているのです。

スキャン
紙の文書や画像をスキャンしてデジタル画像に変換します。
画像解析
スキャンされた画像のレイアウトを解析し、テキスト部分を特定します。
文字認識
各文字をパターン認識技術を用いて識別し、対応するデジタル文字コードに変換します。

ただ、OCRには利点もあるんです。 手動でのデータ入力を自動化し、時間と労力を節約できます。
デジタル化されたテキストは簡単に検索、編集、共有が可能です。─ だからAI学習されるんだけどね ─
紙媒体の文書をデジタル形式で保存することで、物理的なスペースを節約し、管理が容易になるという点もあるでしょう。

OCRを完璧に防ぐのは難しいけど…

完全にOCRを除去することは難しいです。
技術は日々進化しており、手書き文字や複雑なフォントも高精度で認識できるようになっているので。
特に画像の解像度や品質が高い場合、OCRは非常に高い精度でテキストを認識します。

しかしながら、先ほど説明したように画像化、テキストの歪み、透かしの追加などの方法を組み合わせることで、OCRの精度を下げることができます。
だから創作で小説を書いている人も、諦めなくて良いんじゃないかな。
ここはちょっとオマケで、プログラミングによるAI学習妨害手段まで紹介しちゃいます。

ランダムなノイズをテキストに加えるプログラム

ランダムなノイズをテキストの背景に加えることで、OCR(光学文字認識)がテキストを認識しにくくすることができます。
PythonとPillow(PIL)ライブラリを使って、画像にランダムなノイズを加えるプログラムを試してみましょう。

Pythonをインストールした後、コマンドプロンプトでPillowライブラリのインストールを行います。─ この部分は後述のイラスト関連セクションでもご紹介しています。─

Pillowライブラリをインストールするコマンド


pip install pillow
  

次に、指定した画像にノイズを加え、ノイズを加えた画像を任意の場所に保存するプログラムを用意します。

ノイズを加えるプログラムtextnoise.py


import random
from PIL import Image, ImageDraw

def add_noise(image, noise_level=100):
    width, height = image.size
    draw = ImageDraw.Draw(image)

    for _ in range(noise_level):
        x = random.randint(0, width - 1)
        y = random.randint(0, height - 1)
        r = random.randint(0, 255)
        g = random.randint(0, 255)
        b = random.randint(0, 255)
        draw.point((x, y), fill=(r, g, b))

    return image

def process_image(input_image_path, output_image_path, noise_level=1000):
    image = Image.open(input_image_path)
    noise_image = add_noise(image, noise_level)
    noise_image.save(output_image_path)
    print(f"Saved noisy image at {output_image_path}")

# 入力画像のパスと出力画像のパスを指定
input_image_path = r'C:\Users\アレコレ\OneDrive\_fein\google cloud\fein-sites-dev1\www\another-eden\anaimage\ハイエンドコンテンツ対策.png'
output_image_path = r'C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\output_image.png'

# 画像を処理
process_image(input_image_path, output_image_path)
  

このプログラムの説明をしますね。

add_noise関数
指定した画像にランダムなノイズを加えます。
process_image関数
入力画像を読み込み、add_noise関数を使用してノイズを加え、指定された場所に保存します。
ファイルパスの設定
input_image_pathにノイズを加えたい画像のパスを指定します。
output_image_pathにノイズを加えた画像を保存したい場所のパスを指定します。

その気になれば、こういうプログラミングでOCRがテキストを認識しにくい画像を作成することだってできます。
指定した画像にノイズを加えてから任意の場所に保存するようにすれば、作業もしやすいですよね。

AI学習妨害ツールについて

こちらのページと併せてX(旧:Twitter)の変化にどう対処するかもご覧いただけると、現在の「SNS移住」に関する対応について、ある程度は掴めるかと思います。
Glaze等のAI学習妨害ツールは、ちゃんと効いていると思います。
技術的にも当然のようにAI学習を妨害できるでしょうし、AIイラストを頻用する層が具体的に対応しているという点でも、効いています。
例えばAIイラストの生成ツールをローカルで稼働させようとしたり、妨害ツールを通したイラストを避けるような動きが出ていますよね。
可能ならみんなで妨害ツールを使うと良いかもしれませんが、他人様に強要はできませんしね…
しかし、やれる人はやったほうが、AIに対する防御として良い効果を見込めるでしょう。

AI学習妨害ツールのリスト

個人サイトの「やることリスト」にも同じことは書いてありますが、こちらもことあるごとに更新していきますね。

フェードアウト効果の草花写真

画像にウォーターマークを追加

画像にウォーターマークを追加する方法はいくつかあります。
とりあえずツールを紹介しちゃいましょう。

ノーマルねここの壁紙

スマホアプリを使う方法

PCソフトを使う方法

GIMPなら、私も以前使っていましたね。
次のようにしていたはず。

  1. フリーソフトをダウンロードしてインストールします。
  2. 画像をインポートし、レイヤー機能を使ってテキストや画像を追加します。
  3. 不透明度や位置を調整して保存します。

オンラインツールを使う方法

これらの方法を使って、簡単に画像にウォーターマークを追加することができます。
使用するデバイスやソフトウェアの好みによって使い分けて頂ければ。
あるいはオンラインツールを使うとAI学習され…って、もうキリがないよね…

ウォーターマークはAI学習を防げるのか

フェードアウト効果の草花写真

ウォーターマークというのは、画像や動画にロゴやテキストを重ねて表示することで著作権を主張したり、無断使用を防ぐための手段です。
ウォーターマークには大きく分けて可視的ウォーターマークと不可視的ウォーターマークの2種類があります。
まずはこれを説明しましょう。
いずれにしても完璧に防ぐことは難しいです。

可視的ウォーターマーク

画像や動画の上にロゴやテキストを重ねることで、視覚的に著作権を主張します。
著作権保護や改ざん防止に有効です。例えば、イラストに「©2024fein(私の名前です)」といったテキストを入れることで、無断使用を防ぐことができます。
しかし、高度な画像編集ソフトウェアを使われると簡単に除去される可能性があります。─ 法的な側面は後述します。 ─

不可視的ウォーターマーク

デジタルデータに埋め込まれるもので、肉眼では見えません。
しかし、特定のソフトウェアで検出可能です。
これなら視覚的な影響を与えずに著作権を主張できます。
特定のソフトウェアが必要であり、一般的な利用者には認識されにくいです。

不可視的ウォーターマークの入れ方

フェードアウト効果の草花写真

不可視的ウォーターマークは画像や動画に肉眼では見えない形で情報を埋め込む技術です。
これに関しては、より詳しく説明するセクションが必要かと思われます。
著作権保護や無断使用防止に有効な手段ですが、これもAI学習を完全に防ぐことは難しいでしょう。
他の対策と併用することをお勧めします。
注意点としては、不可視的ウォーターマークを検出するためには専用のソフトウェアが必要であることです。

不可視的ウォーターマークを入れるツール

ソフトウェアならAdobe PhotoshopやGIMP。
専用ツールならDigimarcやStegano。
オンラインサービスならWatermarklyPhotoMarks
私は不可視的ウォーターマークを積極的に用いるタイプではありませんでしたが、Steganoなら説明できます。─ 発展編のプログラミングのところでお話しします。 ─

AI学習を防ぐ観点からのウォーターマーク

フェードアウト効果の草花写真

あるいは、ウォーターマークを画像全体に濃く入れると良いのかもしれません。
AIが画像を学習する際にノイズとして認識され、学習の質が低下するでしょう。
しかし最新のAIアルゴリズムは、ウォーターマークをノイズとして除去する能力が向上しており、完全に防ぐことは難しいようです。
また、ウォーターマークが薄い場合や部分的にしか入っていない場合、効果はさらに低くなります。

このように著作権保護や無断使用防止に有効な手段ではありますが…AI学習を完全に防ぐことは難しいかと。
ウォーターマークの他にも画像のメタデータに著作権情報を追加する、画像の表示方法を工夫するなど、複数の対策を併用することが重要と考えています。

ウォーターマークと著作権

ウォーターマークを無断で除去してはいけませんよ?
法的問題に発展する可能性があります。
ウォーターマークは、オリジナルコンテンツの所有権を示すために使用されるものであり、これを除去する行為は著作権侵害と見なされることがあります。
私は少しだけホームページ作成が趣味なだけで、法律の専門家ではありません。
でも、次のレベルくらいなら、ITの教科書にも普通に書いてあります。

著作権侵害
ウォーターマークを除去して他人の作品を無断で使用することは、著作権法に違反する行為です。
契約違反
画像や動画の使用に関する契約でウォーターマークの保持が義務付けられている場合、その除去は契約違反となります。
不正競争防止法
商業的な目的でウォーターマークを除去し、他人の作品を自分のものとして偽る行為は、不正競争防止法に抵触する可能性があります。
フェードアウト効果の草花写真

だからさー…
技術が何であろうが、どういう理由であろうが、他人様の作ったものを勝手にパクるのはダメなんだよ。
私のように弁護士でもない一般人であるなら、他人様の作品を勝手に盗むのは手段がどうであれダメなものはダメだと考えて頂ければ良いでしょう。
そっちのほうが、ややこしい議論するより安心してインターネットで遊べますよ?
したがって、ウォーターマークを除去する前に、その行為が法的に許されるかどうかを確認することが重要です。
著作権者の許可を得ることが、最善の方法であると言えましょう。

では、ここから発展編へ移ります。
個人サイト制作からプログラミングまで。
それもAI学習からイラストを守ることを目的として、書いていきます。
普通のhtml・css・JavaScriptの勉強であれば、書店で専用の教科書を買った方が良いです。
プログラミングまで視野に入れば…
例えば、複数画像へ一気に不可視的ウォーターマークを挿入なんてこともできます。

発展編:個人サイトでAI学習を防ぐ!

フェードアウト効果の草花写真

SNSやイラストコミュニケーションサービスを使っている、言い換えるとインターネットにコンテンツをアップロードしている以上、何らかのリスクはあるでしょうね。
これはイラストに限らず全ての媒体においてです。
xfolioはとても優秀なプラットフォームだと思いますが、動作が重いという話を聞きます…
早くインフラ整備が終わると良いですね。

それで…そういう状況だからいっそのこと個人サイトを作ってしまおうというのが現在の潮流なのですが、さすがに個人サイトともなれば、かなりの自由が利きますよ?
だって自分でプラットフォームを用意しちゃおうという試みなのですから。

プラットフォームを作るとはどういうことか

プラットフォームとは、コンピュータやソフトウェアが動くための土台のようなものです。
例えば、X(旧:Twitter)や個人サイト、pixivなどは、特定のプラットフォーム上で動いています。

X(旧:Twitter)

X(旧:Twitter)は、インターネット上にあるソーシャルメディアプラットフォームです。
このプラットフォームは、ユーザーがメッセージを投稿したり、他の人の投稿を読んだりするための土台を提供しています。
X(旧:Twitter)自体が一つの大きなプラットフォームであり、その上で様々な機能やサービスが動いています。

pixiv

pixivは、イラストコミュニケーションサービスのプラットフォームです。
ここでは、ユーザーが自分のイラストを投稿し、他のユーザーと共有したり、コメントをもらったりすることができます。
pixivというプラットフォームがあることで、イラストレーターたちは作品を発表し、コミュニケーションを取ることができます。

個人サイト

個人サイトも同様に、ウェブサーバーというプラットフォーム上で動いています。
ウェブサーバーは、ウェブページを表示するための基盤であり、個人サイトのデザインや内容をインターネット上で見られるようにしています。

要するにプラットフォームは、アプリケーションやサービスが動くための「舞台装置」と考えると分かりやすいかもしれませんね。
それがあるからこそ、私たちは様々なデジタル体験を楽しむことができます。

個人サイト制作はプラットフォーム制作
フェードアウト効果の草花写真

X(旧:Twitter)は経営方針が嫌い、Pixivもなんかアレ、xfolioはちょっと敷居が…
こういう感情面はけっこう大切だと思いますよ?
私の場合、X(旧:Twitter)が不具合を連発し、システムとして信用できないプラットフォームだと思ったんですよ。
だから個人サイトを稼働させているのです。
絵師さんなら絵師さんなりの事情があるでしょう。

でも個人サイトだから最強というのも、ちょっと一考の余地ありですよ?
個人サイトを入れる箱であるWebサーバーが不安定なら、もちろん個人サイトだって不安定になります。
個人サイトを入れる箱であるWebサーバーの規約がAI学習するぞと言うなら、もちろん個人サイトだってAI学習されます。

とは言え個人サイトであれば、ただ単にプラットフォームを間借りするだけの状態よりも、ユーザーの自由が利く場面が非常に多いのです。
だって自分で創るプラットフォームだから。
そういう意味では確かに最強ですよね。
クラウドへのホスティングまで視野に入れれば、想像できる範囲でいろんなことが、その人のスキル次第でやれちゃいます。

自分でコーディング&プログラミングできれば最高です

フェードアウト効果の草花写真

これは…そりゃあそうでしょうと言うしかありません。
さすがにサーバーくらいはレンタルサーバーを借りるとしても、html・css・JavaScript及びサーバーサイドスクリプトまで自分で書けるなら、選択肢が一気に広がります。
サーバーサイドスクリプトは巷で話題になるcgiのことだなーと思って頂ければけっこうです。
例えばこのサイトなら「Python」というプログラミング言語を使って稼働させています。
他にはyamlやxmlといった言語を使って、全体をコントロールしています。
もちろんrobots.txtだって設置していますしね。

可能ならレンタルサーバーではなくクラウドを使おう

レンタルサーバーも素晴らしいサービスがいっぱいあります。
でもITに自信があるなら、次のようなクラウドサービスを使っていただくと、より安全圏にいられる可能性があります。
結論から言えば、AIに対して非常に厳しいEU諸国に個人サイトを置いておきましょうということですよ。

これらのクラウドに個人サイトをアップロードするとき、サーバーの「リージョン」というものを選択できるのです。
リージョンはサーバーの場所のことです。
それを、EU諸国のどれかに設定すれば良いということだよね。
このサイトだってEUのサーバーを選択しています。

フェードアウト効果の草花写真

現在、AI学習に関する最も厳しい法律を課しているのはEU諸国です。
2024年に成立した「EU AI規制法」は、世界初の包括的なAI規制法であり、AIシステムのリスクレベルに応じて厳格な規制を設けています。
この規制法は、AIシステムをリスクの程度に応じて分類し、それぞれに対して異なる規制を適用します。
例えば、基本的人権を侵害する可能性のあるAIシステムは使用が禁止され、高リスクのAIシステムには厳格なリスク評価や透明性の確保が求められます。
EUのAI規制法は、AI技術の安全性と倫理的な利用を確保することを目的としており、他の国々にも影響を与える可能性があります。

でもクラウドはIT知識を要求します…

ちゃんと時間作って勉強すれば大したことありません。
でも学習コストというのは侮れないものがあります。
現状のクラウドはIT初心者様にお勧めできるような環境ではないと思っています…
用語も難しく、CLIというコマンドプロンプトみたいな画面の操作まで要求されてしまったり。
ここらへんがもっとやりやすくなってくれると良いですね。

では、気を取り直して!
ここからは個人サイトならではの対策案を紹介していきます

イラスト表示にJavaScriptを経由する

フィーネ子供時代顔グラフィック.png

ちょっと言い方が難しいですから、簡単に言い換えます。
要するに、JavaScriptを読めないクローラーは、JavaScript経由のコンテンツを拾いに行けないのですよ。
だからイラストを表示する時に、ちょっとしたJavaScriptによるアニメーションなどを添えることで、AIクローラーがクロールしにくくなります。

例えば私のサイトであれば、ユーザーが画像のところにまでスクロールしてくると、徐々に画像が表示されるようなアニメーションが付いています。
このセクションでフワッと浮かび上がる画像は、私の最推しキャラであるアナザーエデンのフィーネです。
こんな感じで掲載していくと、クローラーからイラストを守りやすいかと。

これはJavaScriptで制御しているのですが、ブラウザでJavaScriptの動作を抑止すると、草花の写真を除くほぼ全ての画像が閲覧不能になります。
つまり、JavaScriptを読めないクローラーは、私のサイトにある「イラスト」のほとんど全てを認識できません。
このようにJavaScriptを使用してイラストの表示を制御することで、一般的なウェブクローラーが画像を直接取得するのを防ぐことができます。

フィーネ猫なで.jpg

とはいえ人間の目には普通に見えるのですよ。
今どきJavaScriptをoffにしたブラウザなんて使っていたら、ほっとんどのサイトで動作に支障が出てしまうからです。
意図的にJavaScriptの実行を抑止しているユーザーはほぼいないとみて間違いありません。

ただし、AIは進化しています。
JavaScriptを実行してコンテンツを取得する能力を持つものもあります。
分かりやすそうな例を紹介しましょう。

Apify
Webサイトをスクレイピングし、データを収集するためのプラットフォーム。
Crawlee
Webサイトを自動的に巡回し、データを収集するためのツール。
フィーネ全身.jpg

クローラーとは特定の目的でWebサイトを自動的に巡回し、コンテンツを収集するプログラムのことを指します。
ApifyとCrawleeはクローラーの一種と考えても良いでしょう。

さて、これらのクローラー(亜種も含めて)はJavaScriptを実行することで、動的に生成されるコンテンツを取得する能力を持っています。
したがって、JavaScriptを使った対策だけでは不十分な場合があるため、他の対策も併用することをお勧めします。
次はrobots.txtについてです。

robots.txtファイルの設定

ウェブクローラーに対して特定のページやディレクトリをクロールしないよう指示できます。
ここからはちょっとWeb制作に関するお話になってくるので、真っ先にかみ砕きます。

まず、いろんなウェブサイトビルダーがありますが、robots.txtファイルを置けるものとそうでないものがあります。
あまりに簡易的なウェブサイトビルダーだと、あるいは設定に難渋する可能性もあります。
そういう意味でも、全て自分でコーディングしている個人サイトは強いですよね。

robots.txtを置けるウェブサイトビルダー

私が以前からお勧めしているGoogle SitesやBloggerではrobots.txtファイルの設定が可能です。
しかし、他にもrobots.txtファイルの設定ができるウェブサイトビルダーはいくつかあります。

フィーネ猫を抱いている.jpg
WordPress
プラグインを使用してrobots.txtファイルを編集できます。
Wix
SEO設定からrobots.txtファイルをカスタマイズできます。
Squarespace
デフォルトのrobots.txtファイルが提供されますが、カスタム設定も可能です。
Weebly
SEOツールを使ってrobots.txtファイルを編集できます。
Shopify
テーマのコードを編集することでrobots.txtファイルをカスタマイズできます。

これらのプラットフォームを利用することで、検索エンジンのクローラーに対する指示を細かく設定することができます。
ただ、実際にこれらのプラットフォームで個人サイトを作り始める前に、念のため確認してください。
ここで私が提供している情報が古い可能性だって十分にあります。

robots.txtの書き方

星4フィーネステータス画面.jpg

robots.txtはウェブサイトの管理者が検索エンジンのクローラーに対して、特定のページやディレクトリへのアクセスを制御するためのテキストファイルです。
クローラーがどのページをクロール(収集)するかを指示できます。

robots.txtの基本構成

robots.txtファイルは、以下のような構成で記述されます。


User-agent: [クローラー名]
Disallow: [禁止するパス]
Allow: [許可するパス]
Sitemap: [サイトマップのURL]
  
User-agent
クローラーの名前を指定します。全てのクローラーに対して指示を出す場合は * を使います。
Disallow
クローラーにアクセスさせたくないページやフォルダを指定します。/ を使うと、サイト全体がブロックされます。
Allow
Disallowでブロックした中でも、特定のパスを許可したい場合に使います。
Sitemap
サイトマップのURLを指定します。
クローラーにサイト全体の構造を知らせることができます。
robots.txtの具体例

全てのクローラーに対して全てのページを許可


User-agent: *
Disallow:
  

全てのクローラーに対して全てのページをブロック


User-agent: *
Disallow: /
  

特定のフォルダ(例:/private/)のみをブロック


User-agent: *
Disallow: /private/
  

特定のファイル形式(例:pdfファイル)をブロック


User-agent: *
Disallow: /*.pdf$
  
robots.txtの設置場所

robots.txtファイルは、ウェブサイトのルートディレクトリに配置します。
例えば、https://example.com/robots.txt のように、サイトのルートからアクセス可能である必要があります。

robots.txtの確認方法

Google Search Consoleなどのツールを使用して、robots.txtファイルの設定を確認し、誤りがないかをチェックできます。

robots.txtの注意点
フェードアウト効果の草花写真

robots.txtは法的拘束力がないため、悪意のあるクローラーは無視することがあります。
厳密な対策が必要な場合は、サーバーレベルでのIPブロックやCAPTCHA認証などを併用するのが効果的です。

では、いよいよプログラミングに移ります。
誤解しないで頂きたいのは「個人サイトはプログラミングができなくても作れる」ということです。
だから「発展編」としてあります。

発展編:プログラミングでAI学習と無断転載を防ぐ!

これも個人サイトの利点だと思うんですよね。
特に自分でhtml・css・JavaScriptを書いて構築された個人サイトであれば、融通が利きやすい。
ここではステガノグラフィという技術を使って、画像に情報を埋め込む方法をお話しします。

ステガノグラフィ技術を使って画像に情報を埋め込む

ステガノグラフィ技術を使って、画像に情報を埋め込む「Stegano」というツールがあります。
これけっこう有名だと思うのですが、なぜかTwitterで言及している人を見つけられなかったです。

Stegano公式サイト

Steganoを使って不可視的ウォーターマークを入れる方法を書いていきます。
SteganoはPythonで動作するステガノグラフィツールですから、まずはpythonのインストールからです。

WindowsにPythonをインストール
不可視的ウォーターマークを入れていない写真

ここからはコマンドプロンプトを使っていきます。
こんな感じで、画像にこっそりとステガノグラフィを入れていくのです。
不可視的ウォーターマークを入れるソフトもありますが、このようにコマンドプロンプトを使えば、低スペックパソコンで複数画像へ一気にステガノグラフィを入れることも可能です。

1. Pythonのダウンロード

  1. Pythonの公式サイトにアクセスします。
  2. 画面上部の「Downloads」メニューから「Windows」を選択します。
  3. 最新バージョンのPythonをダウンロードします。

2. Pythonのインストール

  1. ダウンロードしたインストーラーを実行します。
  2. インストール画面で「Add Python 3.x to PATH」にチェックを入れます。
    このチェックを入れることでPythonがシステムのPATHに追加され、コマンドプロンプトから直接Pythonを起動できるようになります。
  3. 「Install Now」をクリックしてインストールを開始します。
  4. インストールが完了したら、「Close」をクリックしてインストーラーを閉じます。

3. インストールの確認

  1. Windowsの検索バーに「cmd」と入力してコマンドプロンプトを開きます。
  2. コマンドプロンプトに「python --version」と入力してEnterキーを押します。
  3. インストールされたPythonのバージョンが表示されれば、インストールは成功です。

これでPythonのインストールが完了し、使用する準備が整いました。
次に、Steganoをインストールします。
次のコマンドをコマンドプロンプトに入力します。


pip install stegano
  

steganoをインストールできたら…
いよいよpythonによるプログラミングですね。
コードをコピペしていただいても構いませんが、使う時はご自身でも十分に確認してください。
可能なら、少しでいいからお勉強していただいたほうが良いです。

ステガノグラフィを使うなら画像はpng形式で

JPEG形式の画像に隠されたデータは、JPEGの圧縮アルゴリズムによって破損する可能性があります。
特にLSB(最下位ビット)ステガノグラフィは、JPEGの圧縮によって隠されたメッセージが失われることがあります。
そのため、PNG形式などの非圧縮形式の画像を使用することをお勧めします。
次に示すのは、jpg画像をまとめてpng形式にするプログラムです。

jpgをまとめてpngにするjpgpng.py


import os
from PIL import Image

def convert_jpg_to_png(input_directory, output_directory):
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)

    for filename in os.listdir(input_directory):
        if filename.lower().endswith(('.jpg', '.jpeg')):
            input_path = os.path.join(input_directory, filename)
            output_path = os.path.join(output_directory, os.path.splitext(filename)[0] + '.png')

            img = Image.open(input_path)
            img.save(output_path, 'PNG')

            print(f"Converted {input_path} to {output_path}")

# 入力ディレクトリのパス
input_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_metadata"
# 出力ディレクトリのパス
output_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_metadata\metainput"

convert_jpg_to_png(input_directory, output_directory)
  

Steganoを使って画像に不可視的ウォーターマークを埋め込むプログラム

不可視的ウォーターマークを入れていない写真

まずは完成品の画像を陳列します。
こちらは不可視的ウォーターマークを入れていない写真です。


不可視的ウォーターマークを入れている写真

こちらは不可視的ウォーターマークを入れている写真です。
肉眼でご覧ください。
判別できますか?

まずは1枚の画像を扱うpythonから行きましょう。

1つの画像にメッセージを隠す1hide.py


from stegano import lsb
import base64

# 隠すメッセージをUTF-8でエンコードし、Base64でエンコードする
message = base64.b64encode("これはfeinの花写真です。AI学習及び画像盗用を禁止します。".encode('utf-8')).decode('utf-8')

# メッセージを隠す
secret = lsb.hide(r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_1hide\flower1.png", message)
secret.save(r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_1hide\output_image.png")

print("メッセージを画像に埋め込みました")
  

これはシンプルに1枚の画像へメッセージを隠すプログラムです。
ディレクトリ表記の部分は、各自の画像の場所に置き換えてください。

隠されたメッセージを確認するhidemessage.py


from stegano import lsb
import base64

image_path = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_1hide\output_image.png"  # 任意の画像ファイルのパスを指定

# 隠されたメッセージを読み取る
message = lsb.reveal(image_path)

# メッセージをBase64でデコードし、UTF-8でデコードする
if message is not None:
    decoded_message = base64.b64decode(message).decode('utf-8')
    print(decoded_message)
else:
    print("メッセージが見つかりませんでした")
  

これは隠されたメッセージを確認するプログラムです。
コマンドプロンプトにメッセージ内容が表示されます。
このようにSteganoを使うことで、画像に不可視的なウォーターマークを簡単に埋め込むことができます。

フォルダ内の画像全てにまとめてメッセージを隠すall_hide.py


import os
from stegano import lsb
import base64

def hide_message_in_directory(input_directory, output_directory, message):
    # メッセージをUTF-8でエンコードし、Base64でエンコードする
    encoded_message = base64.b64encode(message.encode('utf-8')).decode('utf-8')

    if not os.path.exists(output_directory):
        os.makedirs(output_directory)

    for filename in os.listdir(input_directory):
        file_path = os.path.join(input_directory, filename)

        if filename.lower().endswith('.png'):
            secret = lsb.hide(file_path, encoded_message)

            new_file_path = os.path.join(output_directory, f"hidden_{filename}")
            secret.save(new_file_path)
            print(f"Message hidden in {new_file_path}")

input_directory = r"path_to_your_input_directory"  # 画像が保存されている入力ディレクトリのパス
output_directory = r"path_to_your_output_directory"  # メッセージを隠した画像を保存する出力ディレクトリのパス
message = "隠したいメッセージ"
hide_message_in_directory(input_directory, output_directory, message)
    

これはフォルダ内の画像全てにメッセージを隠すプログラムです。
input_directoryとoutput_directoryの部分は、各自の画像の場所に置き換えてください。

フォルダ内にある全て画像に隠されたメッセージを確認するall_hidemessage.py


from stegano import lsb
import base64
import os

def reveal_message_from_directory(directory):
    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)

        if filename.lower().startswith('hidden_') and filename.lower().endswith('.png'):
            message = lsb.reveal(file_path)

            if message is not None:
                decoded_message = base64.b64decode(message).decode('utf-8')
                print(f"Message from {filename}: {decoded_message}")
            else:
                print(f"No message found in {filename}")

output_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_allhide\afterhide"  # メッセージを隠した画像を保存する出力ディレクトリのパス
reveal_message_from_directory(output_directory)
    

これはフォルダ内の画像全てに隠されたメッセージを確認するプログラムです。
ディレクトリ表記の部分は、各自の画像の場所に置き換えてください。

こちらも完成品を置きましょう。
このように、複数画像にまとめて不可視的ウォーターマークを入れることができます。


不可視的ウォーターマークを入れていない写真1

こちらは不可視的ウォーターマークを入れていない写真1です。


不可視的ウォーターマークを入れていない写真2

こちらは不可視的ウォーターマークを入れていない写真2です。


不可視的ウォーターマークを入れていない写真3

こちらは不可視的ウォーターマークを入れていない写真3です。


不可視的ウォーターマークを入れている写真1

こちらは不可視的ウォーターマークを入れている写真1です。


不可視的ウォーターマークを入れている写真2

こちらは不可視的ウォーターマークを入れている写真2です。


不可視的ウォーターマークを入れている写真3

こちらは不可視的ウォーターマークを入れている写真3です。


ステガノグラフィとは何か

ステガノグラフィ(Steganography)とは、情報を他のデータに埋め込んで、その存在自体を隠す技術のことです。
今回のような画像に関する文脈では、画像のピクセルデータにメッセージやデータを埋め込むことで、見た目には分からない形で情報を隠すことができます。
例えば、画像の各ピクセルの色情報の最下位ビット(LSB)を変更することで、メッセージを埋め込む方法がありますね。
古代から使われてきた技術で、現代ではデジタルメディアにおける情報隠蔽やセキュリティの分野で利用されています。

最も注目すべきなのは、この方法を使うと、画像の見た目にほとんど変化がないことですよ。
隠された情報が検知されにくいという特徴があるのです。
AI学習の阻止という意味ではノイズを明確に入れたほうが良いでしょうね。
しかし、このステガノグラフィは無断転載対策としては非常に優れた手法と思います。

ちなみに、ITのお勉強という意味であれば、このステガノグラフィは誰でも知ってるレベルの基本です。
セキュリティの分野でよく見る言葉ですよね。
なんでTwitterのイラスト界隈で目にしないんだろうと、ずっと不思議に思っています。
まぁこれでも完璧にはならないからでしょう…
ステガノグラフィも無敵ではないです。

画像をスライスして安易な収集を防ぐ

ここでは、pythonで次のようなことをするプログラムを組みます。
  1. ある1枚の画像を縦もしくは横に分割する
  2. その画像は任意のディレクトリに保存できる
  3. 分割された画像を綺麗に表示できるよう、htmlコードをテキスト出力させる

個人サイトに画像を分割して表示することで、簡単に収集できないようにします。
しかし極力綺麗に表示させたいですし、同時に手間も削減したいです。
このスクリプトは、画像を縦もしくは横に分割し、任意のディレクトリに保存し、分割された画像を綺麗に表示するHTMLコードを生成します。
まずは完成形をお見せします。

【スライスされた画像が並んでいる】

Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice

いかがでしょうか?
この上下にある草花と木の実の画像は、本当は10枚分にスライスされているのです。
よく見ないとスライスされていることが分かりにくいでしょう。

【実際には横にスライスされている】

Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice Image Slice

学生時代のWebサイトでは、ここまでは実装しなかったですね。
でも絵師さん界隈でイラストをスライスするという話が出ていて、懐かしく思ったものです。

画像をスライスしてhtmlも出力するsliceimg.py


import os
from PIL import Image

def split_image(image_path, output_directory, split_direction='horizontal', num_splits=10):
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)

    img = Image.open(image_path)
    img_width, img_height = img.size

    split_images = []

    if split_direction == 'horizontal':
        split_height = img_height // num_splits
        for i in range(num_splits):
            box = (0, i * split_height, img_width, (i + 1) * split_height)
            split_img = img.crop(box)
            split_img_path = os.path.join(output_directory, f"split_{i + 1}.png")
            split_img.save(split_img_path)
            split_images.append(split_img_path)
    elif split_direction == 'vertical':
        split_width = img_width // num_splits
        for i in range(num_splits):
            box = (i * split_width, 0, (i + 1) * split_width, img_height)
            split_img = img.crop(box)
            split_img_path = os.path.join(output_directory, f"split_{i + 1}.png")
            split_img.save(split_img_path)
            split_images.append(split_img_path)

    return split_images

def generate_html(image_paths, output_html_path):
    html_content = """
    <html>
    <head>
        <title>Image Slices</title>
    </head>
    <body>
        <div style="width: 100%; overflow: hidden;">
            <div style="float: left; width: 60%;">
                <p>ここにテキストが入ります。このテキストは画像の左側に回り込みます。</p>
            </div>
            <div style="float: right; width: 40%;">
    """
    for image_path in image_paths:
        html_content += f'<img src="{image_path}" alt="Image Slice" style="display: block; width: 100%;">\n'
    html_content += """
            </div>
        </div>
    </body>
    </html>
    """

    with open(output_html_path, 'w') as f:
        f.write(html_content)

# 入力画像のパス
image_path = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_slice\slice_a.png"
# 出力ディレクトリのパス
output_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_slice\cat_a"
# 出力HTMLファイルのパス
output_html_path = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_slice\cat_a.html"

# 画像を分割
split_images = split_image(image_path, output_directory, split_direction='horizontal', num_splits=10)

# HTMLファイルを生成
generate_html(split_images, output_html_path)

print(f"Images have been split and saved to {output_directory}. HTML file has been generated at {output_html_path}.")
  

このスクリプトではsplit_image関数が画像を分割し、generate_html関数が分割された画像を表示するHTMLコードを生成します。
image_path、output_directory、およびoutput_html_pathを適切なパスに置き換えて使用してください。

split_image関数が画像を分割する部分を担当しています。
画像を指定された方向(縦または横)に分割し、指定された数(num_splits)に基づいて分割します。

例えば、num_splits=2と指定した場合、画像は2つの部分に分割されます。
分割の細かさはnum_splitsの値によって決まります。
値が大きいほど、画像はより細かく分割されます。

関数の動作の説明

横方向に分割する場合(split_direction='horizontal')
画像の高さをnum_splitsで割り、各部分の高さを計算します。
画像を上から下に向かってnum_splits個の部分に分割します。
縦方向に分割する場合(split_direction='vertical')
画像の幅をnum_splitsで割り、各部分の幅を計算します。
画像を左から右に向かってnum_splits個の部分に分割します。

例えば、num_splits=4と指定すると、画像は4つの部分に分割されます。
分割の細かさを調整したい場合は、num_splitsの値を変更してください。

num_splitsを20などの大きな数に設定すると、その分だけ自動的に<img>タグが生成されます。
generate_html関数はsplit_image関数で生成されたすべての分割画像のパスをリストとして受け取り、そのリストに基づいてHTMLコードを生成します。

仮にnum_splits=20と設定した場合、split_image関数は画像を20個に分割し、それぞれの分割画像のパスをimage_pathsリストに追加します。
その後、generate_html関数はimage_pathsリストの各パスに対して<img>タグを生成し、HTMLファイルに書き込みます。

全体の流れを再確認

  1. split_image関数で画像を20個に分割し、分割された画像のパスをimage_pathsリストに格納します。
  2. generate_html関数でimage_pathsリストを受け取り、各画像のパスに対して<img>タグを生成し、HTMLファイルを作成します。

htmlをpythonに出力させた後の作業

これなんですよ。
稼働させている個人サイトへ直接挿入することもできますが、大切なイラストをスライスしているのですから、さすがに途中で手作業を挟んだ方がよろしいかと。
でもその分の手間がかかります。
とりあえず箇条書きにしますね?

  1. 元のイラストのコピーを安全なディレクトリに配置
  2. 上記の「sliceimg.py」を実行する
  3. スライスされた画像を、個人サイトの画像ディレクトリへ配置
  4. 生成されたhtmlを、個人サイトの任意の箇所へコピー貼り付け
  5. 貼り付けたhtmlコードを、個人サイトのディレクトリ構造に合うよう変更
  6. 動作確認
  7. アップロード

手順の4と5のハードルが高いですよね…
慣れてる人がやるにしても、慎重な作業が求められると思います。
ただ単に画像をスライスするだけではなく、それを個人サイトへ実装し、かつレスポンシブデザインに気を配りつつ、綺麗に配置しなければなりません。
少なくともこの画像スライスに関しては、課題が残ると言って良いでしょう。
IT初心者さんでも扱えるようにする必要があると思います。

画像のメタデータに著作権情報を追加

画像ファイルのプロパティの詳細タブに表示される情報がメタデータです。
ここには、撮影日時、カメラの設定、位置情報などの他に、著作権情報も含めることができます。
Windowsのエクスプローラーで画像ファイルを右クリックし、「プロパティ」を選択して「詳細」タブを開きましょう。
すると、「タイトル・作成者・著作権・コメント」のような情報が表示されるはずです。

これらのフィールドに著作権情報を入力することで、画像のメタデータに著作権情報を追加することができます。
画像が無断で使用された場合でも、著作権者の情報が確認できるようになるわけですよ。
でもAI学習の阻止に直接的な役割を果たすわけではありません。

このセクションでは、メタデータを追加した草花の写真を添えていきましょうね🌸

複数画像のメタデータにまとめて情報を入力する

画像のメタデータに著作権情報を追加するPythonスクリプトの例を紹介します。
Pillowライブラリを使用してPNG画像のメタデータに著作権情報を追加します。

すでに上記でPythonのインストールはご紹介しました。
今度はPillowライブラリをインストールします。

Pillowライブラリをインストールするコマンド


pip install pillow
  

次に、以下のスクリプトを使用して、画像のメタデータをまとめて追加します。
これはある任意のフォルダに入っている画像全てに、共通する著作権情報と作者情報を一気に入力できるプログラムです。

メタデータをまとめて入力するプログラムpngmetadata.py


import os
from PIL import Image, PngImagePlugin

def add_metadata_to_png_images(input_directory, output_directory, metadata_dict):
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)

    for filename in os.listdir(input_directory):
        if filename.lower().endswith('.png'):
            input_path = os.path.join(input_directory, filename)
            output_path = os.path.join(output_directory, filename)  # 出力先を指定

            img = Image.open(input_path)
            metadata = PngImagePlugin.PngInfo()

            for key, value in metadata_dict.items():
                metadata.add_text(key, value)

            img.save(output_path, pnginfo=metadata)

            print(f"Metadata added to {output_path}")

# 入力ディレクトリのパス
input_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_metadata\metainput"
# 出力ディレクトリのパス
output_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_metadata\metaafter"
# メタデータ情報
metadata_dict = {
    "Copyright": "© 2023 fein. All rights reserved.",
    "Author": "fein_den_scoth_mn"
}

add_metadata_to_png_images(input_directory, output_directory, metadata_dict)
  

順を追って説明します。
このスクリプトは指定されたフォルダ内のPNG画像に対して、著作権情報と作者情報を追加し、別の指定されたフォルダに保存しているんですよね。

メタデータを入れた写真1
ライブラリのインポート
osモジュールとPillow(PIL)ライブラリのImageとPngImagePluginをインポートしています。
これでファイル操作や画像操作が可能になります。
関数の定義
add_metadata_to_png_imagesという関数を定義しています。
この関数は、3つの引数(入力ディレクトリ、出力ディレクトリ、メタデータ辞書)を取ります。
出力ディレクトリの作成
関数の最初で、指定された出力ディレクトリが存在しない場合、新たにディレクトリを作成します。
ファイルの処理
入力ディレクトリ内のファイルを一つずつ処理します。
ファイル名がPNG形式で終わるもの(.png)を対象にします。
画像の読み込みとメタデータの追加
対象ファイルのパスを取得し、その画像を開きます。
PngImagePlugin.PngInfoを使用して、新しいメタデータオブジェクトを作成します。
メタデータ辞書に含まれるキーと値を順に追加していきます。
画像の保存
メタデータが追加された画像を、指定された出力ディレクトリ内に同じファイル名で保存します。
処理の完了メッセージ
各画像ファイルに対して、メタデータが追加されたことを示すメッセージを表示します。

次に、以下のスクリプトを使用して、画像にメタデータが入っているか確認します。

メタデータをまとめてチェックするpngmetacheck.py


import os
from PIL import Image

def print_png_metadata(input_directory):
    for filename in os.listdir(input_directory):
        if filename.lower().endswith('.png'):
            input_path = os.path.join(input_directory, filename)

            img = Image.open(input_path)
            metadata = img.info

            print(f"Metadata for {input_path}:")
            for key, value in metadata.items():
                print(f"  {key}: {value}")

# 入力ディレクトリのパス
input_directory = r"C:\Users\アレコレ\OneDrive\_fein\google cloud\web tools\aiprotect\picture_metadata\metaafter"

print_png_metadata(input_directory)
  

ここも説明しないとね。
このスクリプトは指定されたフォルダ内のPNG画像に含まれるメタデータをコンソール上に表示します。

メタデータを入れた写真1
ライブラリのインポート
osモジュールとPillow(PIL)ライブラリのImageモジュールをインポートしています。
これでファイル操作や画像操作が可能になります。
関数の定義
print_png_metadataという関数を定義しています。
この関数は入力ディレクトリを引数として取ります。
ファイルの処理
入力ディレクトリ内のファイルを一つずつ処理します。
ファイル名がPNG形式で終わるもの(.png)を対象にします。
画像の読み込みとメタデータの取得
対象ファイルのパスを取得し、その画像を開きます。
画像のメタデータをimg.infoを使用して取得します。
メタデータの表示
取得したメタデータをキーと値のペアで表示します。
各キーと値が表示されるようにループ処理を行います。

メタデータの基本をおさらいする

メタデータには画像形式によって扱える内容が異なる場合がありますが、共通して利用できるメタデータも存在します。
JPEG、PNG、JPEGの3つの画像形式で共通して扱える主なメタデータには、次のようなものがありますね。

共通して扱えるメタデータ

著作権情報 (Copyright)
著作者の権利を表す情報です。
作者情報 (Author)
画像の作成者または著作者の名前です。
タイトル (Title)
画像のタイトルや名前です。
説明 (Description)
画像の内容や説明です。
キーワード (Keywords)
画像に関連するキーワードやタグです。
メタデータを入れた写真1

あまり細かくは書かないけど、JPG形式ではExifメタデータ、PNG形式では独自のチャンクを使用してメタデータを保存します。
これがややこしいんですよね。
私も学生時代はずいぶん悩みました。
でもこうして共通のメタデータフィールドを利用することも可能です。

このページでは著作権情報と作者情報のみをまとめて追加しています。
とりあえずイラストを無断転載から守るという意味では、これで用が足りるだろうと思っているからね。
ちなみに著作権情報と作者情報はそれぞれ異なる意味を持ち、異なる役割を果たします。

著作権情報 (Copyright)は、特定の作品に対する法的な権利を示します。これは通常、作品の作成者または著作権を所有する個人や団体によって主張されるものです。
「© 2023 fein. All rights reserved.」のように記述します。

作者情報 (Author)は、実際に作品を作成した個人の名前です。これは作品のクリエイターやアーティスト、著者の名前を示します。著作権情報とは異なり、作者情報は必ずしも法的権利に関係しないことがありますが、作品のクリエイターを特定するために重要です。
「fein_den_scoth_mn」のように記述します。

短くまとめると…
著作権情報は法的な権利を示し、誰がその作品の著作権を所有しているかを明示します。
作者情報は作品を実際に作成した人物の名前であり、作品のクリエイターを特定します。
このように、両者は関連しているものの、異なる役割を持っています。

日本語にも対応させる場合

ここではアルファベットのみとしましたが、著作権情報や作者情報を日本語で書きたい場合はどうなるでしょう。
ファイルを読み書きするときに明示的にエンコーディングを指定することができます。


with open('file.txt', 'r', encoding='utf-8') as file:
content = file.read()
  

ただ、各々の環境で試してみないことには正確なことは分かりません。
Macを使っている人もいるからね。
まだ各種OSをカバーする仮想環境は準備できていないので、いずれ検討しましょう。

とりあえず、以上です

しかし、前述したようにこのページも拡張していこうと思います。
私自身もいろいろ調べていきますし、こういう「AI学習からイラストを守る」みたいな難題は、非常に勉強になるからです。
最先端の技術について考えることにも繋がりますしね。


サイトマップ

アナザーエデン関連ページ・サイトマップ

アナザーエデンの強敵戦やストーリーコンテンツのリスト、お勧めバッジなどを掲載したコーナーです。
期間限定のない普通のRPGですので、初心者でも安心して続けていけるゲームとなっています。
もっとも重要なグラスタについては、場所別に網羅した表があります。

個人サイトのホスティングとコンテンツ作成

個人でウェブサイトを作るにはどうすればいいか。
HTML・CSS・JavaScriptの書き方はもちろん、無料かつ広告なしでホームページを作る方法を掲載したコーナーです。
Webデザインやレイアウトについても書いてあります。

魚釣りなどアウトドアのエリア

ゲームとパソコンだけじゃなく、アウトドアも趣味なんです。
このコーナーでは魚釣りの記録とか、魚料理のレシピ、はたまたサイクリングなどなど。
アウトドアに関連するコンテンツが詰め込まれています。