sas*_*nin 8

据我所知,Haskell还没有好的图像处理库.

更好的方法

您可以使用hsmagick(绑定到libmagick)来操作图像.

有关示例,请参阅TomMD的答案.

简单的方法

但是如果你想从Haskell做到这一点,这可以解决问题(假设ImageMagick可用):

import System.Cmd (system)
import System.Environment (getArgs)

main = do
  (original:rotated:_) <- getArgs
  system $ "convert -rotate \"-45\" \"" ++ original ++ "\" \"" ++ rotated ++ "\""
Run Code Online (Sandbox Code Playgroud)

用法:

runghc rotate.hs original.jpg rotated45.jpg
Run Code Online (Sandbox Code Playgroud)

艰辛的道路

或者您可以选择艰难的方式,并自己实施旋转算法.要在Haskell中读写几乎所有图像格式,可以使用Codec.Image.DevIL库.如果你这样做,那么你可以将这些代码放在Hackage上.


scl*_*clv 6

GD库允许您这样做,但Haskell绑定(http://hackage.haskell.org/package/gd)目前不包含适当的功能.还可以向维护者发出功能请求,或者只是修补它并将其发送到上游.实际上,Graphics.GD.Internal模块(未导出)已经对相应的函数进行了注释掉的绑定(http://hackage.haskell.org/packages/archive/gd/3000.5.0/doc/html/src/ Graphics-GD-Internal.html),所以它应该非常简单,我想,完成这项工作(我相信,工作将受到赞赏).


Tho*_*son 5

浏览Hackage.我知道Tim开始研究与libmagick的绑定,这还不足以阻止我在需要图像处理时为GIMP生成脚本fu,但如果你只是做旋转之类的简单事情就足够了:

liftM (rotateImage 45) (readImage file) >>= writeImage file2
Run Code Online (Sandbox Code Playgroud)

我看到Cale还有一个ImLib,看起来功能更完整:

loadImageImmediately file >>= contextSetImage >>
createRotatedImage 45 >>= contextSetImage >> saveImage file2
Run Code Online (Sandbox Code Playgroud)

正如我所说,环顾四周告诉我们!