【问题标题】:Python importing Vcard PhotoPython 导入 Vcard 照片
【发布时间】:2020-04-30 20:03:41
【问题描述】:

我正在尝试使用 vobject 将照片导入我的卡片。我将图像存储在我的静态文件夹中,并将文件名存储在我的数据库中。我想将它导入到我的 VCard 中。

到目前为止,我已经做到了:

    if request.method == "POST":
            rowr = User.query.filter_by(user_id = user_id).first()
            rowes = Profile.query.filter_by(user_id = user_id).first()
            vcf_file_path = 'static/Contacto.vcf'
            with open(vcf_file_path , 'w') as file_vcard:
                vcard = vobject.vCard()
                o = vcard.add('fn')
                o.value = rowes.pname

                if rowr.img_url != 'default.png':
                    o = vcard.add('PHOTO')
                    o.value = rowr.img_url

                if rowes.pemail != None:
                    o = vcard.add('email')
                    o.type_param = 'INTERNET'
                    o.value = rowes.pemail

                if rowes.pcellphone != None:
                    o = vcard.add('TEL')
                    o.type_param = 'Número Celular'
                    o.value = str(rowes.pcellphone)

                if rowes.webpage != None:
                    o = vcard.add('url')
                    o.type_param = "Página Web"
                    o.value = rowes.webpage

                if rowes.textarea != None:
                    o = vcard.add('note')
                    o.type_param = "note"
                    o.value = rowes.textarea

                file_vcard.write(vcard.serialize())

但它显然没有在我的 VCard 中显示图像。我试过写整个路径,但也没有用。提前致谢

【问题讨论】:

    标签: python flask vcf-vcard vobject


    【解决方案1】:

    看起来您正在将字符串 'default.jpg' 写入照片字段,而实际上您需要写入 base64 编码图像。您可以使用以下函数来执行此操作:

    import base64
    def b64_image(filename):
        with open(filename, 'rb') as f:
            b64 = base64.b64encode(f.read())
            return b64.decode('utf-8')
    

    然后这样称呼它:

    o = vcard.add('PHOTO;ENCODING=b;TYPE=image/jpeg')
    o.value = b64_image('default.jpg')
    

    显然向该函数传递图像文件的有效路径,在您的情况下可能是rowr.img_url

    我基于 vCard Format Specification.

    经过测试,这会在 vcf 文件中创建一行,如下所示:

    PHOTO;ENCODING=B;TYPE=IMAGE/JPEG:iVBORw0KGgoAAA...........
    

    我在 OSx 上的 Contacts v12.0 中打开了它,它呈现了我的示例图像:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多