1

I am trying to create an image with 4 pixels:

1 pixel in red color, 1 pixel in blue color, 1 pixel in green color, 1 pixel in white color

Code:

import wand.image

red = wand.image.Color('rgb(255,0,0)')
green = wand.image.Color('rgb(0,255,0)')
blue = wand.image.Color('rgb(0,0,255)')
white = wand.image.Color('rgb(255,255,255)')

myImage = wand.image.Image(width=2,height=2)

with wand.image.Image (myImage) as img:
    img[0][0] = red
    img[0][1] = blue
    img[1][0] = green
    img[1][1] = white
    img.save(filename='out.png')

But it only creates a transparent png. What am I doing wrong?

1 Answer 1

2

Wand's pixel iterators lack the ability to "sync" the color data back into ImageMagick's "authentic" pixels data-steam.

You can implement an import-pixel-data stream, like this question (similar questions get asked a lot).

Or use wand.drawing.Drawing API.

from wand.image import Image
from wand.drawing import Drawing
from wand.color import Color


with Drawing() as ctx:
    colors = ["RED", "GREEN", "BLUE", "WHITE"]
    for index, color_name in enumerate(colors):
        ctx.push()                         # Grow context stack
        ctx.fill_color = Color(color_name) # Allocated color
        ctx.point(index % 2, index / 2)    # Draw pixel
        ctx.pop()                          # Reduce context stack
    with Image(width=2, height=2, background=Color("NONE")) as img:
        ctx.draw(img)
        img.sample(100,100)
        img.save(filename="output.png")

output.png

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.