imagesize-conduit 0.4.0 → 0.5.0
raw patch · 3 files changed
+15/−17 lines, 3 filesdep ~conduitPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: conduit
API changes (from Hackage documentation)
- Data.Conduit.ImageSize: sinkImageInfo :: Monad m => Sink ByteString m (Maybe (Size, FileFormat))
+ Data.Conduit.ImageSize: sinkImageInfo :: Monad m => GLSink ByteString m (Maybe (Size, FileFormat))
- Data.Conduit.ImageSize: sinkImageSize :: Monad m => Sink ByteString m (Maybe Size)
+ Data.Conduit.ImageSize: sinkImageSize :: Monad m => GLSink ByteString m (Maybe Size)
Files
- Data/Conduit/ImageSize.hs +12/−14
- imagesize-conduit.cabal +2/−2
- test/main.hs +1/−1
Data/Conduit/ImageSize.hs view
@@ -7,7 +7,7 @@ ) where import qualified Data.ByteString.Lazy as L-import qualified Data.Conduit as C+import Data.Conduit import qualified Data.Conduit.Binary as CB import qualified Data.ByteString as S import Data.ByteString.Char8 ()@@ -22,28 +22,29 @@ -- | Specialized version of 'sinkImageInfo' that returns only the -- image size.-sinkImageSize :: Monad m => C.Sink S.ByteString m (Maybe Size)+sinkImageSize :: Monad m => GLSink S.ByteString m (Maybe Size) sinkImageSize = fmap (fmap fst) sinkImageInfo -- | Find out the size of an image. Also returns the file format -- that parsed correctly. Note that this function does not -- verify that the file is indeed in the format that it returns, -- since it looks only at a small part of the header.-sinkImageInfo :: Monad m => C.Sink S.ByteString m (Maybe (Size, FileFormat))+sinkImageInfo :: Monad m => GLSink S.ByteString m (Maybe (Size, FileFormat)) sinkImageInfo =- C.NeedInput (pushHeader id) close+ start id where- close = return Nothing+ start front = await >>= maybe (return Nothing) (pushHeader front)+ pushHeader front bs' | S.length bs >= 11 && S.take 5 (S.drop 6 bs) == S.pack [0x4A, 0x46, 0x49, 0x46, 0x00] =- sinkPush jpg $ S.drop 4 bs+ leftover (S.drop 4 bs) >> jpg | S.length bs >= 6 && S.take 6 bs `elem` gifs =- sinkPush gif $ S.drop 6 bs+ leftover (S.drop 6 bs) >> gif | S.length bs >= 8 && S.take 8 bs == S.pack [137, 80, 78, 71, 13, 10, 26, 10] =- sinkPush png $ S.drop 8 bs- | S.length bs < 11 = C.NeedInput (pushHeader $ S.append bs) close- | otherwise = C.Done (Just bs) Nothing+ leftover (S.drop 8 bs) >> png+ | S.length bs < 11 = start $ S.append bs+ | otherwise = leftover bs >> return Nothing where bs = front bs' @@ -65,9 +66,6 @@ return $ (\w h -> (Size w h, PNG)) <$> mw <*> mh else return Nothing - sinkPush (C.NeedInput push _) x = push x- sinkPush _ _ = error "Data.Conduit.ImageSize.sinkPush"- jpg = do mi <- getInt 2 0 case mi of@@ -94,7 +92,7 @@ getInt :: (Monad m, Integral i) => Int -> i- -> C.Sink S.ByteString m (Maybe i)+ -> Pipe S.ByteString S.ByteString o u m (Maybe i) getInt 0 i = return $ Just i getInt len i = do mx <- CB.head
imagesize-conduit.cabal view
@@ -1,5 +1,5 @@ Name: imagesize-conduit-Version: 0.4.0+Version: 0.5.0 Synopsis: Determine the size of some common image formats. Description: Currently supports PNG, GIF, and JPEG. This package provides a Sink that will consume the minimum number of bytes necessary to determine the image dimensions. License: BSD3@@ -18,7 +18,7 @@ Library Exposed-modules: Data.Conduit.ImageSize Build-depends: base >= 4 && < 5- , conduit >= 0.4 && < 0.5+ , conduit >= 0.5 && < 0.6 , bytestring >= 0.9 ghc-options: -Wall
test/main.hs view
@@ -8,7 +8,7 @@ import Test.HUnit main :: IO ()-main = hspecX $ do+main = hspec $ do describe "image size" $ do it "png" $ check (Just $ Size 271 61) "test/logo.png" it "jpg" $ check (Just $ Size 271 61) "test/logo.jpg"