Hi,
Here is a solution using JuicyPixels:
import Codec.Picture
import Codec.Picture.Types
main :: IO ()
main = do
Right img <- readImage "test.png"
_ <- writeDynamicPng "test2.png" (dynamicPixelMap circleImage img)
return ()
circleImage :: Pixel a => Image a -> Image a
circleImage img = generateImage (\x y -> f x y $ pixelAt img x y) edge edge
where
edge = min (imageWidth img) (imageHeight img)
f x y a = if x'*x' + y'*y' < e'*e'
then a
else colorMap (const 0) a
where
e' = edge `div` 2
x' = x - e'
y' = y - e'