How do I rotate a JPEG image by 45° and save it back to disk in Haskell?

How do I rotate a JPEG image by 45° and save it back to disk?

6
задан Matvey Aksenov 15 June 2012 в 15:43
поделиться

3 ответа

Насколько я знаю, для 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.

8
ответ дан 8 December 2019 в 12:17
поделиться

Библиотека 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), поэтому я полагаю, что завершить работу должно быть очень просто (и я уверен, что работа будет оценена по достоинству).

6
ответ дан 8 December 2019 в 12:17
поделиться

Посмотрите на Hackage. Я знаю, что Тим начал работать над привязками к libmagick, чего было недостаточно, чтобы помешать мне перейти к созданию скрипта-фу для GIMP, когда мне нужно было манипулировать изображениями, но для вас этого достаточно, если вы просто выполнение простых вещей, таких как вращение:

liftM (rotateImage 45) (readImage file) >>= writeImage file2

Я вижу, что у Кейла также есть ImLib , которая кажется более полной:

loadImageImmediately file >>= contextSetImage >>
createRotatedImage 45 >>= contextSetImage >> saveImage file2

Как я сказал, посмотрите вокруг и дайте нам знать!

5
ответ дан 8 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: