How do I rotate a JPEG image by 45° and save it back to disk?
Насколько я знаю, для 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 ++ "\""
Использование:
runghc rotate.hs original.jpg rotated45.jpg
Или вы можете выбрать трудный способ, и реализовать алгоритм вращения самостоятельно. Для чтения и записи почти всех форматов изображений на Haskell можно использовать библиотеку Codec.Image.DevIL. Если вы это сделаете, было бы неплохо выложить этот код на Hackage.
Библиотека 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), поэтому я полагаю, что завершить работу должно быть очень просто (и я уверен, что работа будет оценена по достоинству).
Посмотрите на Hackage. Я знаю, что Тим начал работать над привязками к libmagick, чего было недостаточно, чтобы помешать мне перейти к созданию скрипта-фу для GIMP, когда мне нужно было манипулировать изображениями, но для вас этого достаточно, если вы просто выполнение простых вещей, таких как вращение:
liftM (rotateImage 45) (readImage file) >>= writeImage file2
Я вижу, что у Кейла также есть ImLib , которая кажется более полной:
loadImageImmediately file >>= contextSetImage >>
createRotatedImage 45 >>= contextSetImage >> saveImage file2
Как я сказал, посмотрите вокруг и дайте нам знать!