การสร้าง Indexed Image ด้วย PIL (Python Image Library)

ผมอยากจะ generate ภาพ Indexed Image ที่มี color palette เป็น 2 คือ ขาวกับดำ น่ะครับแต่ไม่รู้ว่าต้องทำอย่างไรดี
เดี๋ยวขออธิบายการทำงานเครื่องมือของผมซักหน่อยนะครับ ที่ผมใช้เป็นเครื่องมือที่จะเป็นเครื่องมือที่ใช้ map texture ตามภาพที่เราใส่เข้าไป โดยส่งพารามิเตอร์ไป 2 ตัวคือ indexed image กับ ลิสต์ของ texture โดยที่ texture ต้องมีจำนวนเท่ากับ color index ของภาพที่ใส่เข้าไป ตอนที่ผมลองสร้าง indexed image ใน GIMP ก็สามารถใช้ได้ตามปกติ แต่ทีนี้ผมต้องการที่จะ generate ภาพขึ้นมาเลยไม่รู้ว่าต้องเซ็ตอย่างไรถึงจะได้อย่างที่ทำใน GIMP

นี่เป็นตัวอย่างที่ผมทำนะครับ ลองสร้างภาพแล้วใส่ palette เข้าไป

import Image,ImageDraw
 
def main():
     image = Image.new("P",(128,128))
     image.putpalette([0,0,0, # แบ็คกราวน์สีดำ
                       255,255,255 # Color index สีขาว
                     ])
     draw = ImageDraw.Draw(image)
     for i in range(image.size[0]):
          draw.point((i,image.size[1]/2),255)
     image.save("/roadmap.png","PNG")
 
if __name__ == '__main__' : main()

พอเอาภาพที่ได้จากโค้ดข้างบนนี้มาใช้ map texture มันก็จะฟ้องว่าภาพ indexed image ของผมมี color index มากกว่า texture ที่ใส่เข้าไป (ผมใส่ไป 2 อันเพราะคิดว่ามันจะมี color index เป็น 2)

รบกวนช่วยแนะนำทีครับ ขอบคุณมากครับ

sugree's picture

หมายถึงต้องการ BW? เปลี่ยน P เป็น L แล้วไม่ต้องยุ่งกับ palette ครับ

แล้วถ้าหากผมมีภาพที่เป็น bitmap ธรรมดาแต่ต้องการนำมาแปลงเป็น PNG ที่มี color palette ต้องอย่างไรบ้างครับ

sugree's picture

ลองโหมด “1” ก่อนก็ได้ ถ้าจะ convert ก็ใช้ image.putpalette()

ขอบคุณครับ

ผมลองแล้วครับปรากฎว่าใช้ไม่ได้ มันต้องเป็นภาพที่มี color palette เท่านั้น ผมเลยไม่รู้ว่าต้องสร้างยังไง

sugree's picture

เอาไปใช้กับโปรแกรมอะไรครับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น