สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

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

ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25635
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

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

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

bolue เขียน: 17/08/2022 1:18 pm ตัว reportlab ไม่สามารถทำได้หรอคะ
ถ้าเป็นการนำภาพมาทำลายน้ำตอนนี้ยังไม่ทราบวิธีการที่ทำได้ค่ะ ถ้ามีการใช้ reportlab ในส่วนนี้ช่วยแนะนำทีค่ะ แต่ถ้าเป็นการรับ Input แบบข้อความ จะใช้ reportlab ในการสร้างไฟล์ PDF เพื่อนำมาเมิจเข้าด้วยกันโดยใช้ PyPDF2 ผลที่ได้ก็จะเป็นแบบนี้ค่ะ

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
if request.type == "text":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
            
        {'Text' : request.text}
        
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.5)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.5)
        c.setFont('Helvetica',50)
        c.drawString(35*mm,400,request.text)
        c.rotate(45)
        c.showPage()
        c.save() # บันทึกไฟล์
        
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
ผลที่ได้จากการทดสอบ API
  • ไฟล์ที่ได้จากการทดสอบ ทั้งหมด 3 ไฟล์ คือไฟล์ PDF ต้นฉบับ ไฟล์ PDF ที่มีข้อความที่เรา Input เข้าไป และ ไฟล์ PDF ที่มีลายน้ำ
    ไฟล์ที่ได้จากการทดสอบ ทั้งหมด 3 ไฟล์.png
    ไฟล์ที่ได้จากการทดสอบ ทั้งหมด 3 ไฟล์.png (9.39 KiB) Viewed 482 times
  • ทดสอบใน postman รับข้อความว่า Test
    ทดสอบใน postman รับข้อความว่า Test.png
    ทดสอบใน postman รับข้อความว่า Test.png (76.26 KiB) Viewed 482 times
  • ไฟล์ PDF ที่มีลายน้ำที่ได้ คือ
    PDF ลายน้ำที่ได้.png
    PDF ลายน้ำที่ได้.png (99.04 KiB) Viewed 482 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25635
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

bolue เขียน: 16/08/2022 10:03 am Q - การใช้งาน reportlab
viewtopic.php?p=262874#p262874

ลองดูจากกระทู้นี้เพิ่มเติมค่ะ ถ้า reportlab อย่างเดียวทำลายน้ำไม่ได้ อาจจะต้องสร้าง pdf 2 ไฟล์ ไฟล์นึงลายน้ำ อีกไฟล์เป็น pdf ที่เราต้องการจะใส่ลายน้ำ แล้วเมิจเข้าด้วยกันโดยใช้ PyPDF2 ค่ะ

***ศึกษา Docs reportlab ก่อนนะคะ ว่าสามารถทำได้หรือเปล่า
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

fonfonn เขียน: 17/08/2022 12:13 pm
fonfonn เขียน: 15/08/2022 5:01 pm ถามเพิ่มเติมนะคะ คือ จากโค้ด เป็นการทำลายน้ำด้วยภาพ ซึ่งเมื่อทำตามขั้นตอนด้านล่างแล้ว ผลที่ได้คือ

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
        
        pic = 'water.jpg'
        pdf = 'pythonPDF.pdf'
        c = canvas.Canvas(pdf)
        c.drawImage(pic,15,15)
        c.save()
ผลที่ได้
  • เมื่อทดสอบ API จะได้ไฟล์ PDF ที่มีภาพ ที่เรา Input แต่ไม่มีตัว ไฟล์ PDFที่ แปลงจาก base64 ค่ะ
    ได้ไฟล์ PDF ที่มีภาพ.png
เลยอยากถามว่าถ้าเราต้องการให้ไฟล์รูปที่เรา Input เข้าไปวางทับบน PDF เดิมที่แปลงจาก base64 ต้องปรับแก้โค้ดตรงไหนคะ
จากที่ถามเรื่องนี้ไปค่ะ ทดลองใช้วิธีนี้สามารถให้ไฟล์รูปที่เรา Input เข้าไปวางทับบน PDF เดิมที่แปลงจาก base64 ได้ค่ะ

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))

        doc = aw.Document()
        builder = aw.DocumentBuilder(doc)
        builder.insert_image("water.jpg")
        doc.save("Output.pdf")
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='Output.pdf' #ไฟล์ลายน้ำ
                )
ซึ่งผลลัพธ์ที่ได้ก็จะเป็นไฟล์ PDF ที่แปลงจาก base64 หนึ่งไฟล์ ไฟล์ภาพที่แปลงจาก base64 หนึ่งไฟล์ และ ไฟล์ ที่มีการทำลายน้ำ 1 ไฟล์
  • ไฟล์ที่ได้จากการทดสอบ
    ไฟล์ที่ได้จากการทดสอบ.png
  • ไฟล์ PDF ต้นฉบับที่แปลงจาก base64
    ไฟล์ PDF ต้นฉบับ.png
  • ไฟล์ที่มีการใส่ภาพที่แปลงจาก base64 ลงบน PDF ต้นฉบับ
    ไฟล์ที่มีการใส่ภาพทับ PDF ต้นฉบับ.png
จากการทำงานนี้ปรับแก้โค้ดในการสร้างไฟล์ PDF ที่มีภาพ เปลี่ยนมาใช้ reportlab ในการสร้างไฟล์ PDF แทน โค้ดที่แก้ไข

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\picture.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
 #ส่วนที่แก้ไข           
        pic = 'picture.jpg'
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.drawImage(pic,35*mm,400)
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.5)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.5)
        c.save() # บันทึกไฟล์
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
ผลลัพธ์ที่ได้
  • ได้ไฟล์ PDF ที่มีการใส่ภาพที่ Input เข้าไป
    ได้ไฟล์ PDF ที่มีการใส่ภาพที่ Input เข้าไป.png
    ได้ไฟล์ PDF ที่มีการใส่ภาพที่ Input เข้าไป.png (134.73 KiB) Viewed 469 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

bolue เขียน: 17/08/2022 1:18 pm ตัว reportlab ไม่สามารถทำได้หรอคะ
จากที่ลองศึกษาแล้ว ยังไม่เจอวิธีการทำลายน้ำด้วย reportlab เลยใช้ PyPDF2 แทน โดยการทำงานคือ ใช้ reportlab สร้าง PDF ตัวลายน้ำขึ้นมา และนำมาเมิจเข้าได้กันกับ PDF ต้นฉบับ ด้วย PyPDF2

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

from reportlab.pdfgen import canvas
from PyPDF2 import PdfFileWriter , PdfFileReader

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\picture.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
 #ส่วนที่แก้ไข           
        pic = 'picture.jpg'
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.drawImage(pic,35*mm,400)
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.5)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.5)
        c.save() # บันทึกไฟล์
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
ผลลัพธ์ที่ได้
ได้ไฟล์ PDF ที่มีการใส่ภาพที่ Input เข้าไป โดยเป็น PDF และภาพ ที่เรา Input base64 เข้าไป
ได้ไฟล์ PDF ที่มีการใส่ภาพที่ Input เข้าไป.png
ได้ไฟล์ PDF ที่มีการใส่ภาพที่ Input เข้าไป.png (134.73 KiB) Viewed 461 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

สอบถามเพิ่มเติมนะคะ คือตอนนี้ตัว API ที่สร้างมา สามารถสร้างลายน้ำได้ตามที่ต้องการ

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\picture.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
            
        pic = 'picture.jpg'
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.drawImage(pic,80*mm,400)
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.5)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.5)
        c.save() # บันทึกไฟล์
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
        
        with open("watermarked.pdf", "rb") as file:
            encoded_string = base64.b64encode(file.read())
ผลลัพธ์
  • ไฟล์ที่ได้จะเป็นแบบนี้ค่ะ
    ไฟล์ที่ได้.png
    ไฟล์ที่ได้.png (128.58 KiB) Viewed 454 times
เลยอยากรู้ว่าในส่วนการ สร้าง PDF จากรูปนั้นสามารถปรับค่า opacity ของภาพให้มีความโปร่งแสงขึ้นได้ไหมคะ


และเมื่อเราใส่ c.rotate('ค่าตัวเลขในการต้องการให้หมุน') แต่ภาพเป็นการหนุมที่จุดเดิมแต่เป็นการหมุนในวงรอบที่กว้างขึ้น
ตัวอย่างไฟล์ที่มีการใส่ค่า c.rotate

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\picture.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
            
        pic = 'picture.jpg'
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.rotate(45)
        c.drawImage(pic,80*mm,400)
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.5)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.5)
        c.save() # บันทึกไฟล์
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
        
        with open("watermarked.pdf", "rb") as file:
            encoded_string = base64.b64encode(file.read())
ผลลัพธ์ที่ไได้
  • จะเห็นว่ารูปมีการหมุนไปวงรอบที่กว่างขึ้น เลยสงสัยว่าเราจะเซ็ตค่ายังไงให้มีการหมุนโดยที่ภาพยังอยู่ในจุดเดิม
    ไฟล์ที่ได้ จากการใส่ rotate.png
    ไฟล์ที่ได้ จากการใส่ rotate.png (103.8 KiB) Viewed 454 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

เลยอยากรู้ว่าในส่วนการ สร้าง PDF จากรูปนั้นสามารถปรับค่า opacity ของภาพให้มีความโปร่งแสงขึ้นได้ไหมคะ
ในส่วนนี้สามารถทำได้แล้วค่ะ สามารถปรับค่า opacity ของภาพให้มีความโปร่งแสงขึ้น โดยการย้าย drawImage ไว้ด้านล่างของ alpha โค้ดคือ

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

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\picture.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
            
        pic = 'picture.jpg'
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.3)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.3) #ตัวปรับความโปร่งแสง
        c.drawImage(pic,80*mm,400) #ย้ายตัววางภาพลงมาด้านล่างแทน
        c.save() # บันทึกไฟล์
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
        
        with open("watermarked.pdf", "rb") as file:
            encoded_string = base64.b64encode(file.read())
ผลลัพธ์ที่ได้
  • ไฟล์ที่ได้
    ไฟล์ที่ได้.png
    ไฟล์ที่ได้.png (142.1 KiB) Viewed 447 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

เมื่อเราใส่ c.rotate('ค่าตัวเลขในการต้องการให้หมุน') แต่ภาพไม่เป็นการหนุมที่จุดเดิมแต่เป็นการหมุนในวงรอบที่กว้างขึ้น
ตัวอย่างไฟล์ที่มีการใส่ค่า c.rotate
ตรงส่วนนี้ยังแก้ไขไม่ได้ค่ะ จะทำยังไงให้เมื่อใส่ c.rotate แล้วภาพหมุนที่จุดเดิม เพราะผลลัพธ์ที่ได้จากการใส่ c.rotate(45) ภาพจะหมุนแต่จะไม่ได้หมุนอยู่ที่จุดเดิม
ไฟล์ที่ได้ จากการใส่ rotate.png
ไฟล์ที่ได้ จากการใส่ rotate.png (103.8 KiB) Viewed 443 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
wkid
PHP VIP Members
PHP VIP Members
โพสต์: 2158
ลงทะเบียนเมื่อ: 17/05/2022 10:37 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

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

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

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

wkid เขียน: 23/08/2022 10:23 am แนวคิดในการทำ ถ้ามีการกำหนด จุด x,y น่าจะต้องมีการขัยบจุด x,y ของแต่ละการหมุนครับ ลองๆปรับ แกน x,y ดูครับ
จากที่แนะนำว่าลองมีการหาจุดเพื่อกำหนดตำแหน่ง และใส่เงื่อนไขของแต่ละการหมุนสามารถทำได้แล้วค่ะ

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

class Waterpic_base64(BaseModel): 
        type : str
        rotate : int #มีการรับค่าของการหมุนเพิ่มขึ้นมา
        pdf_base64: str
        pic_base64: str
        text: str
        
@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        
        with open(PARTHPDF, 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(PARTHJPG, 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
        
        imgresize = Image.open('picture.jpg')
        imgresize = imgresize.resize((200,133),PIL.Image.ANTIALIAS)
        imgresize.save('newpic.jpg')
        pic = 'newpic.jpg'
        c = canvas.Canvas("WATERMARK.pdf") # ไฟล์ที่จะเขียน
        c.setFillColorCMYK(0, 0, 0, 0, alpha=0.3)
        c.rect(204, 199, 157, 15, stroke=0, fill=1)
        c.setFillColorCMYK(0, 0, 0, 100, alpha=0.3)
        
        #ส่วนของการกำหนดในการหมุนแต่ละครั้ง
        if request.rotate == 45:
            c.rotate(45)
            c.drawImage(pic,150*mm,5)
        if request.rotate == 90:
            c.rotate(90)
            c.drawImage(pic,100*mm,-380)
        if request.rotate == 180:
            c.rotate(180)
            c.drawImage(pic,-150*mm,-470)
        if request.rotate == 270:
            c.rotate(270)
            c.drawImage(pic,-170*mm,250)
        c.save() # บันทึกไฟล์
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='WATERMARK.pdf' #ไฟล์ลายน้ำ
                )
        
        with open("watermarked.pdf", "rb") as file:
            encoded_string = base64.b64encode(file.read())
        #os.unlink('pythonPDF.pdf')
        #os.unlink('WATERMARK.pdf')
        #os.unlink('picture.jpg')
        #os.unlink('watermarked.pdf')
        
ผลลัพธ์ที่ได้
  • หนุม45องศา
    หนุม45องศา.png
    หนุม45องศา.png (108.65 KiB) Viewed 422 times
  • หนุม90องศา
    หนุม90องศา.png
    หนุม90องศา.png (108.66 KiB) Viewed 422 times
  • หนุม180องศา
    หนุม180องศา.png
    หนุม180องศา.png (107.67 KiB) Viewed 422 times
  • หนุม270องศา
    หนุม270องศา.png
    หนุม270องศา.png (108.77 KiB) Viewed 422 times
you're the only one treasure💎
ตอบกลับโพส

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

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