YURUGINoriko
@YURUGINoriko

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

1つ目のQRコード画像のみテキスト表示の前に□が入ってしまうので取り除きたい

解決したいこと

1つ目のQRコード画像のみテキスト表示の前に□が入ってしまうので取り除きたい

<プログラム概要>
PythonでCSVファイルを読み、行数分のQRコード画像を作り、QRコードの下に、テキストを表示するプログラムを作成しました。

次の投稿を参考にさせていただきました。
ありがとうございます。

Pythonによる文字表示付きQRコードの大量生成
https://qiita.com/Kosuke_Matsui/items/abc379e4486eeacd283e

CSVファイル
CSV.jpg

問題のある1個目のQRコード画像
RUN1.jpg

二つ目からは□は出なくて望みどおりです

一つ目のQRコードのテキストに□が入る.jpg

該当するソースコード

#画像に余白を付ける関数部分
def add_margin(pil_img, top, right, bottom, left, color):
    width, height = pil_img.size
    new_width = width + right + left
    new_height = height + top + bottom
    result = Image.new(pil_img.mode, (new_width, new_height), color)
    result.paste(pil_img, (left, top))
    return result
#QRコードを保存している部分

with open(filename,encoding='utf-8',newline='') as f:
    for row in f.read().splitlines():
        columns = row.rstrip().split(',') # 1カラム目を取り出して画像を保存するときのファイル名にする
        file_savename = dirname + '\\' + columns[0] + '.png'
        text = columns[0] # 1カラム目を取り出して画像の下にテキスト表示をする

        # QRコード画像データ生成
        img = qrcode.make(row)

        #下方向に余白を付ける ここから2021/08/25追加
        img_new = add_margin(img, 0, 0, 100, 0, '#ffffff')

        #テキストを表示する
        draw = ImageDraw.Draw(img_new) 
        font = ImageFont.truetype("C:\\Windows\\Fonts\\malgun.ttf", 55) 
        draw.text((50, 400), text, font=font, fill='#000000') 

        #画像ファイルとして保存
        img_new.save(file_savename)

自分で試したこと

print(text)
として実行してみると

RUN1
RUN2
RUN3
・・・

となり、RUN1の前に□は現れないので
どうして一つ目の画像だけ□が表示されるのか
わからなくて行き詰まっております。
何かアドバイスがありましたら
どうぞよろしくお願いいたします。<(_ _)>

0

3Answer

成功.jpg
encoding='utf-8-sig'

は思いつかず、行き詰まっておりましたので
大変助かりました。

お世話になりました。
ありがとうございました。

1Like

Comments

  1. @YURUGINoriko

    Questioner

    ありがとうございました。

    ご教示いただきました
    encoding='utf-8-sig'
    の指定にして、□を取り除くことができました。
    勉強になりました。

Excelで「CSV UTF-8 (コンマ区切り)」としてcsvを保存すると、先頭にBOMが付きます。

非アスキー文字を使っていないのなら、試しに「CSV (コンマ区切り)」の方で保存しなおしてみてください。
あるいは、この行を

with open(filename,encoding='utf-8',newline='') as f:

こうします。

with open(filename, encoding='utf-8-sig', newline='') as f:
0Like

Comments

  1. 先に同様の回答が付いていましたね。
    失礼しました。
  2. @YURUGINoriko

    Questioner

    ありがとうございました。

    ご教示いただきました
    encoding='utf-8-sig'
    の指定にして、□を取り除くことができました。

    バイト順マーク(BOM)について初めて知りました。

Your answer might help someone💌