28 เมษายน 2559

VFP : Display Base64 image

Base64 คือรูปแบบการเข้ารหัสวิธีหนึ่ง แต่ที่นิยมกันในปัจจุบันโดยการนำไปใช้เพื่อทำให้ข้อมูลที่เก็บอยู่ในรูปของไบนารี เช่น ภาพ JPG PNG หรือ Bitmap  กลายมาเป็นรูปแบบของตัวอักษร

นิยมนำไปใช้ภายใต้ HTML ตัวอย่างการใช้ ผ่านทางแท็ก img

<img src="data:image/jpg;base64,As10AAQSkZJRg........................Ed0/E//9k=" />

ถ้าหากต้องการเข้ารหัสภาพทางเว็บบราวเซอร์ สามารถเข้าไปที่เว็บ

https://www.base64-image.de/


สำหรับบทความนี้จะนำเสนอวิธีการใช้ด้วยโปรแกรม Visual FoxPro ดังนี้

การเข้ารหัสรูปแบบของภาพไปเป็น Base64

lcPictureFile = GETPICT( "jpg" )
lcPictBase64  = STRCONV( FILETOSTR( lcPictureFile ) , 13 )

การแปลงข้อมูล Base64 กลับไปเป็นแฟ้มภาพ

=STRTOFILE(STRCONV( lcPictBase64 , 14) , lcPictureFile)

การนำข้อมูล Base64 แสดงภายใต้คอนโทรล Image 

ThisForm.Image1.Picture = ""
ThisForm.Image1.PictureVal = STRCONV( lcPictBase64 , 14)

การนำเอาข้อมูล Base64 ไปออกรายงาน

ข้อมูล Base64 เป็นข้อมูลตัวอักษรธรรมดา ซึ่งเราสามารถนำไปบันทึกลงในฟิลด์ได้ทันที โดยเก็บไว้ในฟิลด์ประเภท memo หากต้องการนำข้อมูลมาแสดงผลเป็นรูปภาพในรายงาน สามารถทำได้หลายวิธีดังนี้

* สมมุติขอมูล Base64 ถูกเก็บไว้ที่ตาราง TableBase ภายใต้ฟิลด์ชื่อ Pict

วิธีที่ 1 

1. สร้างรายงาน CREATE REPORT myReport
2. ทำการสร้างตัวแปร โดยคลิกที่เมนู Report -> Variables...
    ที่แท็ป Variables ให้กำหนด
          Value to store:  BlobImage
          Initial value: CREATEOBJECT("Image")

3  นำคอนโทรล Picture/OLE มาใส่ในรายงาน
    double click จะเข้าสู่หน้าต่าง Picture/OLE Bound Properties
         ที่ แท็ป General คลิกเลือก Expression or variable name
         จากนั้นป้อนตัวแปรที่ช่อง Control source: BlobImage
         คลิกปุ่ม OK

4. double click ที่ Detail จะเข้าสู่หน้าต่าง Detail Band Properties
    คลิกที่แท็บ General
       ทีช่อง On entry: ใส่คำสั่ง
         
              EXECSCRIPT("Blobimage.PictureVal=STRCONV(TableBase.Pict , 14)")

              *** TableBase.Pict คือชื่อตารางและฟิลด์ที่เก็บข้อมูล Base64


ทำการบันทึกรายงาน เป็นอันเสร็จเรียบร้อย


วิธีที่ 2

1. สร้างรายงาน จากนั้นนำคอนโทรล Picture/OLE มาใส่
    double click กำหนดค่าในแท็บ General โดยคลิกเลือก Expression or variable name
    ที่ช่อง Control Source:  loRL.oBlobImage
    
    ** loRL คือชื่อ object  และ oBlobImage คือชื่อ property


2.  ทำการเขียนคำสั่ง เพื่อแสดงภาพในรายงาน ดังนี้

USE TableBase    && ตารางที่มีข้อมูล Base64

SET REPORTBEHAVIOR 90

loRL = NEWOBJECT( 'PreviewListener' )
loRL.InitBLOBImage( )  
loRL.LISTENERTYPE = 1  && Preview

REPORT FORM ชื่อรายงาน OBJECT loRL      

RETURN

DEFINE CLASS PreviewListener AS REPORTLISTENER
oBlobImage = NULL

PROCEDURE InitBLOBImage(lpcBlobField AS STRING)
THIS.oBlobImage = NEWOBJECT( 'IMAGE' )
THIS.oBlobImage.PICTUREVAL = STRCONV(Tablebase.pict , 14)
ENDPROC

PROCEDURE BEFOREBAND( nBandObjCode, nFRXRecNo )
IF nBandObjCode = 4 && Detail band
THIS.oBlobImage.PICTUREVAL = STRCONV(Tablebase.pict , 14)
ENDIF
ENDPROC
ENDDEFINE


เสร็จสำหรับการจัดการแสดงผลภาพจาก Base64 ในรายงาน


สำหรับการนำเสนอวิธีการจัดการกับการเข้ารหัสด้วย Base64 ก็จบเพียงเท่านี้

สวัสดี ปีที่มีอากาศร้อนที่สุดๆๆๆๆ

5 ความคิดเห็น:

kaokae กล่าวว่า...

ขอบคุณครับ

kaokae กล่าวว่า...
ความคิดเห็นนี้ถูกผู้เขียนลบ
โจไทยไทย กล่าวว่า...

แจ่มเลย ขอบคุณครัย

sak chai กล่าวว่า...

ยอดเยี่ยมมากครับ

sst กล่าวว่า...

อาจารย์ครับรบกวนหน่อยครับ ถ้ารันผ่าน source รายงานแสดงภาพได้ แต่ถ้า compile แล้ว รันผ่าน exe ขึ้น error
Preperty PictureVal is not found.

ต้องแก้ไขอย่างไรครับ

"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.