【Python】Excelでドット絵を表現するやつを、画像から超カンタンに作成する

お遊びネタ
スポンサーリンク

 

お遊びネタです。
よくExcelシートの「セル色でドット絵を作る」
というネタを見ますが、Pythonを使用して、超カンタンに画像から作成することができましたので、まーまー参考までに。

 

はじめに

Openpyxlを用いて、Excelファイルのいろんな処理ができることから思いつきました。


↑こういったアイコン画像を読み込み、
Excelシートを作成することができます。

 

あまり使用シーンは多くないかもですが、
画像→Excelで表現する手法の一つで参考になれば。

ソースコード

Githubに上げましたので、実際に動かしてみたい方はどうぞ。

MaxiParadise/Make_Excel_PixelArt
Contribute to MaxiParadise/Make_Excel_PixelArt development by creating an account on GitHub.

 

説明

画像データをPillowで読み込み、
全画素の色をOpenpyxlを用いてセル色に設定しています。

フルカラーの写真でも表現できます。

    img = Image.open(file_name).convert('RGBA')
    width, height = img.size
    imgdata = img.getdata()

    #Workbook作成
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.title = 'Excel Art'

    for y in range(height):
        y_offset = y * width
        for x in range(width):
            #画像から色データ取得
            r,g,b,a = imgdata[y_offset+x]
            if a > 128: #透明はスキップ
                #セルに設定
                color_ff = '%02X%02X%02X' % (r,g,b)
                sheet.cell(row=y+1, column=x+1).fill = PatternFill(patternType='solid', fgColor=color_ff)

            #グリッドサイズを正方形に設定
            sheet.column_dimensions[get_column_letter(x+1)].width = GRID_SIZE * COL_PP
            sheet.row_dimensions[y+1].height = GRID_SIZE * ROW_PP

50行ほどのコードで実現できました。

せっかくなので、
いらすとやさんの「AIに支配される人達」のイラストもExcel化してみました。

800x604ピクセルに及ぶ、巨大なExcelシートドット絵もできてしまいます。

 

また、高速化のため、以下のページを参考にさせていただきました。

getpixelを使用せず、
またy_offset 算出を最初に1回にすることで、乗算回数を減らしています。
これは画像が大きいほど効いてくると思うので。

 

注意事項

写真のようなフルカラーも変換できますが、
古いExcelだとセル色設定の最大個数があるらしく、
その値を超えると「ファイルが壊れている」になりました。

Excel2016では大丈夫でしたが、
Excel2010だと、巨大なものは上手く読めなかったです。

 

さいごに

最後まで読んでいただき、ありがとうございます!

ブックマーク登録、
ツイッターフォロー、
よろしくお願いいたします!🙇‍♂️🙇‍♂️
↓↓↓