お遊びネタです。
よくExcelシートの「セル色でドット絵を作る」
というネタを見ますが、Pythonを使用して、超カンタンに画像から作成することができましたので、まーまー参考までに。
はじめに
Openpyxlを用いて、Excelファイルのいろんな処理ができることから思いつきました。
↑こういったアイコン画像を読み込み、
Excelシートを作成することができます。
あまり使用シーンは多くないかもですが、
画像→Excelで表現する手法の一つで参考になれば。
ソースコード
Githubに上げましたので、実際に動かしてみたい方はどうぞ。
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だと、巨大なものは上手く読めなかったです。
さいごに
最後まで読んでいただき、ありがとうございます!
ブックマーク登録、
ツイッターフォロー、
よろしくお願いいたします!🙇♂️🙇♂️
↓↓↓