Revision: 3916 Author: hans URL: http://bknr.net/trac/changeset/3916
When an image is being served unprocessed, send the blob data instead of instantiating the image into memory and then serving it. This way, the original picture quality will be preserved.
U trunk/bknr/web/src/images/imageproc-handler.lisp
Modified: trunk/bknr/web/src/images/imageproc-handler.lisp =================================================================== --- trunk/bknr/web/src/images/imageproc-handler.lisp 2008-09-17 20:32:10 UTC (rev 3915) +++ trunk/bknr/web/src/images/imageproc-handler.lisp 2008-09-18 06:12:23 UTC (rev 3916) @@ -171,8 +171,13 @@ (error-404))
(defmethod handle-object ((page-handler imageproc-handler) image) - (with-http-response (:content-type (image-content-type (image-type-keyword image))) - (handle-if-modified-since (blob-timestamp image)) - (setf (header-out "Last-Modified") (rfc-1123-date (blob-timestamp image))) - (imageproc image (cdr (decoded-handler-path page-handler))))) + (handle-if-modified-since (blob-timestamp image)) + (setf (header-out :last-modified) (rfc-1123-date (blob-timestamp image))) + (let ((operations (cdr (decoded-handler-path page-handler)))) + (if operations + (imageproc image operations) + (with-http-response (:content-type (image-content-type (image-type-keyword image))) + (setf (header-out :content-length) (blob-size image)) + (with-open-file (blob-data (blob-pathname image) :element-type '(unsigned-byte 8)) + (copy-stream blob-data (send-headers) '(unsigned-byte 8)))))))