สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามเพิ่มเติมค่ะ ในการแปลงไฟล์ PDF ที่มีหลายหลายหน้า จะได้ไฟล์รูปหลายรูป เราจะสามารถรู้หรือดึงจำนวนที่แปลงออกมาได้ยังไงคะว่ามีกี่ไฟล์ที่ถูกแปลงออกมา ค่ะ
เช่น ไฟล์ PDF มี 3 หน้า ก็จะได้ รูปภาพ 3 รูป หรือ ไฟล์ PDF 5 หน้า ก็จะมีไฟล์รูป 5 ไฟล์ แบบนี้ค่ะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

สร้างโฟล์เดอร์ตามเวลามาตัวนึง แล้วนับไฟล์ในโฟล์เดอร์เอา หลังจากดึงข้อมูลแล้วให้ลบทั้งโฟล์เดอร์ออก
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

bolue เขียน: 15/08/2022 7:17 pm สร้างโฟล์เดอร์ตามเวลามาตัวนึง แล้วนับไฟล์ในโฟล์เดอร์เอา หลังจากดึงข้อมูลแล้วให้ลบทั้งโฟล์เดอร์ออก
สอบถามค่ะ มีตัวอย่างการทำงานไหมคะ เพราะว่าตอนนี้ ในการสร้างโฟร์เดอร์ รู้แค่เพียง ใช้

โค้ด: เลือกทั้งหมด

import os
os.makedirs('ชื่อโฟร์เดอร์')
เลยอยากรู้ว่าการสร้างโฟร์ที่เป็น timestamp ใช้ยังไงค่ะ

ที่ทดลองทำคือ แต่ไม่ได้ค่ะ

โค้ด: เลือกทั้งหมด

from datetime import datetime
import os
date = datetime.now().strftime("%Y_%m_%d-%I:%M:%S_%p")
os.makedirs(date)
หรือรบกวนแปะโค้ดตัวอย่างการทำงาน ให้ทีค่ะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

ตัวอย่างการสร้าง

โค้ด: เลือกทั้งหมด

from datetime import datetime

 def md_create_dir(self):
        dt = datetime.now()
        ts = str(datetime.timestamp(dt))
        directory = "md_pdf_to_image" + ts
        parent_dir = r"D:\path\path"
        path = os.path.join(parent_dir, directory)
        os.mkdir(path)
        return path
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากโค้ดนี้ที่มีการสร้างโฟร์เดอร์ แบบ timestamp

โค้ด: เลือกทั้งหมด

def create_dir():
    dt = datetime.now()
    ts = str(datetime.timestamp(dt))
    directory = "pdf_to_image" + ts
    parent_dir = r"C:\Users\fonfo\PycharmProjects\pythonProject13"
    path = os.path.join(parent_dir, directory)
    os.mkdir(path)
    return path
และมีการแปลงไฟล์ PDF เป็นภาพ

โค้ด: เลือกทั้งหมด

process = subprocess.Popen(r"Magick convert C:\Users\fonfo\PycharmProjects\pythonProject13\testPDF.pdf C:\Users\fonfo\PycharmProjects\pythonProject13\testPDF.jpg", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
นำไฟล์ที่แปลงได้เก็บใน โฟร์เดอร์ที่สร้าง

โค้ด: เลือกทั้งหมด

shutil.move(r"C:\Users\fonfo\PycharmProjects\pythonProject13\testPDF.jpg" ,create_dir())
จะได้ไฟล์ภาพที่แปลงแล้วมาเก็บในโฟร์เดอร์ แต่ว่าถ้าเป็นการแปลง PDF หลายหน้า จะไม่ถูกเก็บในโฟร์เดอร์ที่สร้างขึ้น จะถูกเก็บนอกโฟร์เดอร์แทน
2022-08-16.png
2022-08-16.png (131.63 KiB) Viewed 746 times
เลยอยากรู้ว่านำภาพทั้งที่แปลงได้หลายๆไฟล์มาเก็บในโฟร์เดอร์ เพื่อนับไฟล์ที่แปลงได้คือแบบไหนคะ ปรับแก้ตรงไหน เพื่อจะทำการนับจำนวนไฟล์ที่สร้างขึ้นมา
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

โค้ด: เลือกทั้งหมด

    def bo(self):
    	out , dir, file_len = self.pdf_to_image
    	image_base_64 = self.image_to_base64(out , dir, file_len)
    	return image_base_64
    
    def pdf_to_image(self):
    	attach_fname = 'bo.pdf'
        attach_fname_jpj = attach_fname.replace(".pdf", ".jpeg")
        dir = self.create_dir()
        jpeg_report_path = os.path.join(dir, attach_fname_jpj)
        fname_new = ' "' + jpeg_report_path + '"'
        if company:
            density = company.md_btn_sale_line_tmp_image
        pdf_report_path = os.path.join(dir, attach_fname)
        with open(pdf_report_path, 'wb') as theFile:
            theFile.write(base64.b64decode(attach_datas))
        
        process = subprocess.Popen(r'Magick convert -verbose -density  '+ pdf_report_path + fname_new,
                    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        out, err = process.communicate()
       
        file_len = len([name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))]) # นับไฟล์ที่อยู่ในโฟล์เดอร์ที่เราสร้างขึ้น
        return out , dir, file_len - 1 # ที่เอามาลบ 1 เพราะมี pdf อยู่ด้วย ถ้าแยกเก็บคนละโฟล์เดอร์ไม่ต้องลบก็ได้

    def create_dir(self):
        dt = datetime.now()
        ts = str(datetime.timestamp(dt))
        directory = "md_pdf_to_image" + ts
        parent_dir = os.path.join(r"D:\path", self._cr.dbname)
        path = os.path.join(parent_dir, directory)
        os.mkdir(path)
        return path

    def image_to_base64(self, out, dir, file_len):
        image_base_64 = []
        store = False
        for no in range(file_len):
            new = "-%s.jpeg" % no
            name_jpg = attach_fname.replace(".pdf", new)
            jpeg_report_path = os.path.join(dir, name_jpg)
            with open(jpeg_report_path, "rb") as image_file:
                image_base_64.append({
                                'base64':  base64.b64encode(image_file.read()),
                            })
            os.rmdir(dir)
        return image_base_64

ค่าใน image_base_64 ที่ได้

โค้ด: เลือกทั้งหมด

[{'base64':  base64_str}, {'base64':  base64_str}, {'base64':  base64_str}]
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากที่พี่มาแปะโค้ดมาให้ ยังงงๆการทำงานอยู่ค่ะ รบกวนอธิบายทีค่ะ ว่ามันใช้งานยังไงในแต่ละส่วน ของฟังก์ชัน หยิบไปใช้งานไม่ถูกเลยอยากให้อธิบายทีค่ะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการส่งค่า กลับเป็น base64 ในภาษา python

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากที่พี่อธิบายเพิ่มเติม และทดสอบการใช้งาน สามารถทำการแปลงไฟล์และบันทึกไฟล์ในโฟร์เดอร์ที่สร้างได้แล้วค่ะ

โค้ด: เลือกทั้งหมด

pdf_b64 = input() #ทดสอบด้วยกับรับ Input base64 ของไฟล์ PDF

dt = datetime.now()
ts = str(datetime.timestamp(dt))
directory = "pdf_to_image" + ts
parent_dir = r"C:\Users\fonfo\PycharmProjects\pythonProject13"
path = os.path.join(parent_dir, directory)
os.mkdir(path)
attach_fname = 'bo.pdf'
attach_fname_jpj = attach_fname.replace(".pdf", ".jpeg")
jpeg_report_path = os.path.join(path, attach_fname_jpj)
fname_new = ' "' + jpeg_report_path + '"'
pdf_report_path = os.path.join(path, attach_fname)
with open(pdf_report_path, 'wb') as theFile:
     theFile.write(base64.b64decode(pdf_b64))

process = subprocess.Popen(r'Magick convert ' + pdf_report_path + fname_new,
                               stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()

file_len = len([name for name in os.listdir(path) if
                    os.path.isfile(os.path.join(path, name))])  # นับไฟล์ที่อยู่ในโฟล์เดอร์ที่เราสร้างขึ้น

image_base_64 = []
for no in range(file_len -1):
    if file_len > 2:
        new = "-%s.jpeg" % no
    else:
        new = ".jpeg"
    name_jpg = attach_fname.replace(".pdf", new)
    jpeg_report_path = os.path.join(path, name_jpg)
    with open(jpeg_report_path, "rb") as image_file:
        image_base_64.append({
            'base64': base64.b64encode(image_file.read()),
        })
        #ส่วนของการลบไฟล์และโฟร์เดอร์ที่สร้างขึ้น
    os.unlink(jpeg_report_path) 
os.unlink(pdf_report_path)
os.rmdir(path)

#สั่งให้แสดงผล base64 ของภาพที่แปลงได้
print(image_base_64)
you're the only one treasure💎
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 91