I found this:
http://stackoverflow.com/questions/3432388/imageio-not-able-to-write-a-jpeg-file
So I changed this:
imgtype (java.awt.image.BufferedImage/TYPE_INT_ARGB)
to this:
imgtype (java.awt.image.BufferedImage/TYPE_3BYTE_BGR)
and that worked for one image. The next image died, for reasons I'm still
investigating.
On Thursday, February 27, 2014 5:17:20 PM UTC-5, Aaron Cohen wrote:
>
> This is going to result in a pretty ugly thumbnail because you're missing
> the hints java needs to do high quality resizing. Java's shrinking also
> doesn't really have a nice smoothing mode.
>
> I'd actually recommend you look into https://github.com/mikera/imagez. It
> has a resize function in core which does what you want. It uses Scalr
> internally which has some good quality options.
>
> As for why your code isn't working, it's hard to say. Can you try just
> writing out the file you read (before resizing) and make sure that it's
> actually loaded correctly?
>
>
>
>
> On Thu, Feb 27, 2014 at 5:04 PM, larry google groups
> <[email protected]<javascript:>
> > wrote:
>
>> I wanted to see what Format strings I am allowed, so at the repl:
>>
>>
>> user> (import 'javax.imageio.ImageIO)
>> javax.imageio.ImageIO
>>
>> user> (require '[clojure.pprint :as pp])
>>
>> user> (pp/pprint (javax.imageio.ImageIO/getReaderFormatNames))["BMP",
>> "bmp", "jpg", "JPG", "wbmp", "jpeg", "png", "JPEG", "PNG", "WBMP", "GIF",
>> "gif"]
>>
>> (fs/extension) was returning ".JPG" with a period. I thought that might
>> be the problem so I removed it:
>>
>> (defn make-thumbnail [filename path-to-new-file-including-file-name width]
>> {:pre [(= (type filename) java.lang.String)
>> (fs/exists? filename)
>> (= (type path-to-new-file-including-file-name) java.lang.String)
>> (number? width)]}
>> (println " we will write thumbnails to here: " (str
>> path-to-new-file-including-file-name))
>> (let [ext (st/replace (fs/extension filename) #"\." "")
>> img (get-file-as-image filename)
>> imgtype (java.awt.image.BufferedImage/TYPE_INT_ARGB)
>> width (min (.getWidth img) width)
>> height (* (/ width (.getWidth img)) (.getHeight img))
>> simg (java.awt.image.BufferedImage. width height imgtype)
>> g (.createGraphics simg)]
>> (.drawImage g img 0 0 width height nil)
>> (.dispose g)
>> (pp/pprint simg)
>> (println "the extension we use:")
>> (pp/pprint ext)
>> (javax.imageio.ImageIO/write simg ext (io/as-file
>> path-to-new-file-including-file-name))))
>>
>> So the final println gives me:
>>
>> the extension we use:
>> "JPG"
>>
>> and yet now I get:
>>
>> Exception in thread "Thread-1" javax.imageio.IIOException: Invalid
>> argument to native writeImage
>> at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native
>> Method)
>>
>> which is surprising since the Format string, without the period, should
>> be more correct.
>>
>>
>>
>>
>>
>> On Thursday, February 27, 2014 4:47:31 PM UTC-5, larry google groups
>> wrote:
>>>
>>>
>>> Hmm, I made it a little further. Now I am trying to write a thumbnail to
>>> disk. I have copied the code from StackOverflow. I am using this function:
>>>
>>> (defn make-thumbnail [filename path-to-new-file-including-file-name
>>> width]
>>> {:pre [(= (type filename) java.lang.String)
>>> (fs/exists? filename)
>>> (= (type path-to-new-file-including-file-name)
>>> java.lang.String)
>>> (number? width)]}
>>> (println " we will write thumbnails to here: " (str
>>> path-to-new-file-including-file-name))
>>> (let [ext (fs/extension filename)
>>> img (get-file-as-image filename)
>>> imgtype (java.awt.image.BufferedImage/TYPE_INT_ARGB)
>>> width (min (.getWidth img) width)
>>> height (* (/ width (.getWidth img)) (.getHeight img))
>>> simg (java.awt.image.BufferedImage. width height imgtype)
>>> g (.createGraphics simg)]
>>> (.drawImage g img 0 0 width height nil)
>>> (.dispose g)
>>> (pp/pprint simg)
>>> (javax.imageio.ImageIO/write simg ext (io/as-file
>>> path-to-new-file-including-file-name))))
>>>
>>>
>>> This line:
>>>
>>> (println " we will write thumbnails to here: " (str
>>> path-to-new-file-including-file-name))
>>>
>>> shows me this, which is the path I want:
>>>
>>> we will write thumbnails to here: /Users/larry/tma_files/
>>> processed/b5838394-a86c-411f-b556-94b30c26a553IMG_1175_180.JPG
>>>
>>> This line:
>>>
>>> (pp/pprint simg)
>>>
>>> gives me:
>>>
>>> #<BufferedImage BufferedImage@7ac84a5b: type = 2 DirectColorModel:
>>> rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster:
>>> width = 125 height = 93 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0>
>>>
>>> I do not get any errors or exceptions, but nothing gets written to disk.
>>> Can anyone suggest why?
>>>
>>> If I look here:
>>>
>>> http://docs.oracle.com/javase/7/docs/api/javax/imageio/
>>> ImageIO.html#write(java.awt.image.RenderedImage, java.lang.String,
>>> java.io.File)
>>>
>>> Writes an image using an arbitrary ImageWriter that supports the given
>>> format to a File. If there is already a Filepresent, its contents are
>>> discarded.
>>> Parameters: im - a RenderedImage to be written.formatName - a String
>>> containg
>>> the informal name of the format. output - a File to be written to.
>>> Returns:false if no appropriate writer is found.
>>>
>>> I am unsure what "false if no appropriate writer is found" means. I
>>> have added code to be sure that only jpeg, gif and png files get to this
>>> function.
>>>
>>> Any suggestions why nothing gets written to disk?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Thursday, February 27, 2014 4:09:10 PM UTC-5, larry google groups
>>> wrote:
>>>>
>>>>
>>>> Ah, I see what happened. There was a Microsoft Word document in my
>>>> folder of images. It was causing the problems. I had no error handling for
>>>> non-images.
>>>>
>>>>
>>>>
>>>> On Thursday, February 27, 2014 3:52:09 PM UTC-5, Aaron Cohen wrote:
>>>>>
>>>>> On Thu, Feb 27, 2014 at 3:44 PM, larry google groups <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> I tried this too:
>>>>>>
>>>>>> (ns tma-make-thumbnails.make-images
>>>>>> (:import
>>>>>> (java.util UUID)
>>>>>> (javax.imageio ImageIO)
>>>>>> (java.awt.image BufferedImage)
>>>>>> (javax.imageio ImageReader))
>>>>>>
>>>>>>
>>>>>>
>>>>>> (defn get-file-as-image [filename]
>>>>>> {:pre [(= (type filename) java.lang.String)
>>>>>> (fs/exists? filename)
>>>>>> (fs/file? (io/as-file filename))]
>>>>>> :post [(do (pp/pprint %) true)
>>>>>> (= (type %) java.awt.image.BufferedImage)]}
>>>>>> (.read ImageIO (io/as-file filename)))
>>>>>>
>>>>>
>>>>> This is trying to invoke the "read" method of the Class instance
>>>>> representing "javax.imageio.ImageIO". This is surely not what you want.
>>>>>
>>>>>
>>>>>> but that only gives me:
>>>>>>
>>>>>> Exception in thread "Thread-1" java.lang.IllegalArgumentException:
>>>>>> No matching method found: read for class java.lang.Class
>>>>>>
>>>>>> I don't get why ImageIO is java.lang.Class after I imported it.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thursday, February 27, 2014 3:09:53 PM UTC-5, larry google groups
>>>>>> wrote:
>>>>>>>
>>>>>>> I have no background with Java so I tend to suffer pain when dealing
>>>>>>> with it. I am trying to create a thumbnail for an image, but my code
>>>>>>> dies
>>>>>>> on the :post assertion of this function:
>>>>>>>
>>>>>>> (defn get-file-as-image [filename]
>>>>>>> {:pre [(= (type filename) java.lang.String)
>>>>>>> (fs/exists? filename)
>>>>>>> (fs/file? (io/as-file filename))]
>>>>>>> :post [(do (pp/pprint %) true)
>>>>>>> (= (type %) BufferedImage)]}
>>>>>>> (javax.imageio.ImageIO/read (io/as-file filename)))
>>>>>>>
>>>>>>
>>>>>
>>>>> This is the correct syntax for invoking a static method of a class.
>>>>> I'm not sure why it's not working for you. What kind of file are you
>>>>> trying
>>>>> to load?
>>>>>
>>>>>
>>>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]<javascript:>
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.