@@ -3,28 +3,28 @@ module Sound.Jammit.Internal.Image
3
3
, jpegsToPDF
4
4
) where
5
5
6
- import qualified Codec.Picture as P
7
- import Codec.Picture.Types ( convertImage )
8
- import Control.Monad ( forM_ , replicateM )
9
- import Control.Monad.IO.Class ( MonadIO ( .. ) )
10
- import qualified Data.ByteString.Lazy as BL
11
- import qualified Data.ByteString as B
12
- import Data.Conduit ( (.|) )
13
- import Data.Conduit.List ( consume )
14
- import qualified Data.Conduit as C
15
- import Data.Maybe ( catMaybes )
16
- import qualified Data.Vector.Storable as V
17
- import Foreign
18
- import Foreign.C
19
- import Control.Exception ( bracket )
20
- import Codec.Picture.Jpg ( encodeJpegAtQuality )
21
-
22
- data PDFInfo
6
+ import qualified Codec.Picture as P
7
+ import Codec.Picture.Jpg ( encodeJpegAtQuality )
8
+ import Codec.Picture.Types ( convertImage )
9
+ import Control.Exception ( bracket )
10
+ import Control.Monad ( forM_ , replicateM )
11
+ import Control.Monad.IO.Class ( MonadIO ( .. ))
12
+ import qualified Data.ByteString as B
13
+ import qualified Data.ByteString.Lazy as BL
14
+ import Data.Conduit ( (.|) )
15
+ import qualified Data.Conduit as C
16
+ import Data.Conduit.List ( consume )
17
+ import Data.Maybe ( catMaybes )
18
+ import qualified Data.Vector.Storable as V
19
+ import Foreign
20
+ import Foreign.C
21
+
22
+ -- data PDFInfo
23
23
data PDFDoc
24
24
data PDFObject
25
25
26
- foreign import ccall unsafe " pdf_create"
27
- pdf_create :: CInt -> CInt -> Ptr PDFInfo -> IO (Ptr PDFDoc )
26
+ -- foreign import ccall unsafe "pdf_create"
27
+ -- pdf_create :: CInt -> CInt -> Ptr PDFInfo -> IO (Ptr PDFDoc)
28
28
29
29
foreign import ccall unsafe " pdf_create_nostruct"
30
30
pdf_create_nostruct :: CInt -> CInt
@@ -37,8 +37,8 @@ foreign import ccall unsafe "pdf_append_page"
37
37
foreign import ccall unsafe " pdf_page_set_size"
38
38
pdf_page_set_size :: Ptr PDFDoc -> Ptr PDFObject -> CInt -> CInt -> IO CInt
39
39
40
- foreign import ccall unsafe " pdf_add_jpeg"
41
- pdf_add_jpeg :: Ptr PDFDoc -> Ptr PDFObject -> CInt -> CInt -> CInt -> CInt -> CString -> IO CInt
40
+ -- foreign import ccall unsafe "pdf_add_jpeg"
41
+ -- pdf_add_jpeg :: Ptr PDFDoc -> Ptr PDFObject -> CInt -> CInt -> CInt -> CInt -> CString -> IO CInt
42
42
43
43
foreign import ccall unsafe " pdf_add_jpeg_direct"
44
44
pdf_add_jpeg_direct
@@ -56,6 +56,9 @@ foreign import ccall unsafe "pdf_save"
56
56
foreign import ccall unsafe " pdf_destroy"
57
57
pdf_destroy :: Ptr PDFDoc -> IO ()
58
58
59
+ foreign import ccall unsafe " pdf_get_err"
60
+ pdf_get_err :: Ptr PDFDoc -> Ptr CInt -> IO CString
61
+
59
62
loadPNG :: FilePath -> IO (P. Image P. PixelRGB8 )
60
63
loadPNG fp = do
61
64
Right dyn <- P. readImage fp
@@ -139,7 +142,11 @@ jpegsToPDF jpegs pdf = let
139
142
pageHeight = inch 11
140
143
in withCString " " $ \ mt -> do
141
144
bracket (pdf_create_nostruct pageWidth pageHeight mt mt mt mt mt mt) pdf_destroy $ \ doc -> do
142
- let check fn = fn >>= \ ret -> case ret of 0 -> return () ; e -> error $ show e
145
+ let check fn = fn >>= \ ret -> case ret of
146
+ 0 -> return ()
147
+ e -> do
148
+ str <- pdf_get_err doc nullPtr >>= peekCString
149
+ error $ " PDF generation error (" <> show e <> " ): " <> str
143
150
forM_ jpegs $ \ jpeg@ (P. Image w h _) -> do
144
151
let thisHeight = round $ (toRational h / toRational w) * toRational pageWidth
145
152
page <- pdf_append_page doc
0 commit comments