[cl-gd-devel] [question] change of colors when tiling an image
Hello all :) I'm using cl-gd to generate tiles of a larger image. I'm generating a set of tiles of each, e.g. 256x256 pixels, from an input image that is much larger, e.g. 4096x2048. When using "debug-images" (pngs) with few colors and large areas of the same color this works well. However, when I want to tile a png file with higher frequencies and lots of colors the resulting tile images seem to be resampled somehow, with a huge loss of quality. Here is part of my code: (with-image-from-file (src input-name) (let ((width (image-width src)) (height (image-height src))) ;; store a single tile (defun generate-tile (x y) "Generates a single tile. The index of which is given in x and y" (with-image (dest size size) (copy-image src dest (* x size) (* y size) 0 0 size size) (write-image-to-file (concatenate 'string output-base "-" (write-to-string x) "-" (write-to-string y) "." ext) :image dest :if-exists :supersede :compression-level 0))) ;; master's actual code (let ((count-x (ceiling (/ width size))) (count-y (ceiling (/ height size)))) (format t "Slicing up ~s (~d x ~d) into (~d x ~d) tiles of size (~d x ~d).~%" input-name width height count-x count-y size size) (dotimes (x count-x) (dotimes (y count-y) (generate-tile x y)))))) As you can see, I don't compress the image (doesn't change, if I leave the compression key out), and only copy a given section to the output image. The version of cl-gd I'm using is 0.5.7, the version of is libgd 2.0.0. I would appreciate if someone would hint me to what I'm missing :) Thanks in advance, Kai.
Kai, I guess your tiles are written in palette mode. Have a look at the optional TRUE-COLOR-P argument that WITH-IMAGE provides. -Hans On Thu, Mar 11, 2010 at 18:29, <colimal@mails.selgrad.org> wrote:
Hello all :)
I'm using cl-gd to generate tiles of a larger image. I'm generating a set of tiles of each, e.g. 256x256 pixels, from an input image that is much larger, e.g. 4096x2048.
When using "debug-images" (pngs) with few colors and large areas of the same color this works well. However, when I want to tile a png file with higher frequencies and lots of colors the resulting tile images seem to be resampled somehow, with a huge loss of quality.
Here is part of my code:
(with-image-from-file (src input-name) (let ((width (image-width src)) (height (image-height src)))
;; store a single tile (defun generate-tile (x y) "Generates a single tile. The index of which is given in x and y" (with-image (dest size size) (copy-image src dest (* x size) (* y size) 0 0 size size) (write-image-to-file (concatenate 'string output-base "-" (write-to-string x) "-" (write-to-string y) "." ext) :image dest :if-exists :supersede :compression-level 0)))
;; master's actual code (let ((count-x (ceiling (/ width size))) (count-y (ceiling (/ height size)))) (format t "Slicing up ~s (~d x ~d) into (~d x ~d) tiles of size (~d x ~d).~%" input-name width height count-x count-y size size) (dotimes (x count-x) (dotimes (y count-y) (generate-tile x y))))))
As you can see, I don't compress the image (doesn't change, if I leave the compression key out), and only copy a given section to the output image. The version of cl-gd I'm using is 0.5.7, the version of is libgd 2.0.0.
I would appreciate if someone would hint me to what I'm missing :)
Thanks in advance, Kai.
_______________________________________________ cl-gd-devel site list cl-gd-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/cl-gd-devel
participants (2)
-
colimal@mails.selgrad.org -
Hans Hübner