[Haskell-cafe] Pixel by pixel image processing

Sylvain Henry hsyl20 at gmail.com
Wed Jun 3 09:52:00 UTC 2015


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'

Sylvain

2015-06-03 9:19 GMT+02:00 Geraldus <heraldhoi at gmail.com>:

> Hi cafe!
>
> I want to do some trivial masking manipulation on PNG images: take a
> picture, crop it to square shape and then make a circular mask, i.e. take
> all pixels that lies outside circle with radius equal to half of image
> width and placed at image center and replace that pixels with zero opacity
> once (hope this description is clear enough).
>
> I've found two packages for image processing so far: `friday` [1] and
> `unm-hip` [2], but can't figure out which of them suits my needs, maybe
> there are some other packages I miss?
>
> [1] https://hackage.haskell.org/package/friday
> [2] https://hackage.haskell.org/package/unm-hip
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150603/e30934a7/attachment.html>


More information about the Haskell-Cafe mailing list