X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=album.el;h=a50670b42b9d0f871e4bcc5ed67609eb13bb6839;hb=4b94e0d61706cc328a4e2a5b9cc3e6a37850eadf;hp=0d7ac012f6e9c174a5ebfb6dc3304d22a5efa155;hpb=d921439af45af559c6c2c3b73ece324c1e998371;p=elisp%2Falbum.git
diff --git a/album.el b/album.el
index 0d7ac01..a50670b 100644
--- a/album.el
+++ b/album.el
@@ -1,6 +1,6 @@
;;; album.el --- Photo album utility
-;; Copyright (C) 2005 MORIOKA Tomohiko
+;; Copyright (C) 2005,2006 MORIOKA Tomohiko
;; Keywords: Photo, image, album, HTML, WWW
@@ -27,32 +27,24 @@
;;; Code:
-(defun album-make-spec-by-width (width limit spec-name)
- (when (> width limit)
- (let ((percent (floor (/ (* limit 100.0) width))))
- (vector percent spec-name
- (/ (* width percent) 100.0)
- (/ (* height percent) 100.0)))))
-
-(defun album-make-spec-by-height (height limit spec-name)
- (when (> height limit)
- (let ((percent (floor (/ (* limit 100.0) height))))
- (vector percent spec-name
- (/ (* width percent) 100.0)
- (/ (* height percent) 100.0)))))
-
(defun album-write-html (dest-dir
prev-file file next-file
- prev-grade grade next-grade)
+ prev-grade grade next-grade
+ lang image-url-prefix
+ &optional image-url)
(with-temp-buffer
(insert
"\n")
+ (insert "
\n")
(insert "\n")
(insert (format "%s\n" file))
(insert "\n")
(insert "\n")
- (insert (format "%s
\n" file))
+ ;; (insert (format "%s
\n" file))
(if prev-file
(insert (format "" prev-file)))
@@ -93,13 +85,27 @@
(insert
(if next-grade
(format "../%s/%s.html" next-grade file)
- (concat "../fullsize/" file ".jpg")))
+ (if image-url
+ (concat (file-name-as-directory image-url-prefix)
+ "fullsize/"
+ image-url)
+ (concat "../fullsize/" file ".jpg"))))
(insert "\">")
- (insert (format "" file file))
+ (insert (format ""
+ (or image-url
+ (concat file ".jpg"))
+ (if image-url-prefix
+ (format "%s%s/%s"
+ (file-name-as-directory image-url-prefix)
+ grade
+ (or image-url file))
+ (or image-url (concat file ".jpg")))))
(insert "
+[index]
+
")
@@ -113,7 +119,13 @@
(expand-file-name (symbol-name grade)
dest-dir)))))
-(defun album-convert-image (dest-dir prev-file file next-file)
+(defun album-convert-image (image-dest-dir
+ prev-file file next-file
+ lang image-url-prefix
+ html-dest-dir)
+ (setq file (expand-file-name file))
+ (unless html-dest-dir
+ (setq html-dest-dir image-dest-dir))
(let* ((ret
(with-temp-buffer
(call-process "identify" nil t t file)
@@ -123,102 +135,250 @@
(string-to-number (match-string 2))))))
(width (car ret))
(height (cdr ret))
+ (specs '((QVGA 320 240)
+ (VGA 640 480)
+ (SVGA 800 600)
+ (XGA 1024 768)
+ (WXGA 1280 768)
+ (SXGA 1280 1024)
+ (SXGA+ 1400 1050)
+ (WSXGA+ 1680 1050)
+ (UXGA 1600 1200)
+ (WUXGA 1920 1200)
+ (QXGA 2048 1536)
+ (WQXGA 2560 1600)
+ ))
prev-grade
rest dest)
- (cond ((>= width height)
- (when (setq ret (album-make-spec-by-width width 2048 'QXGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-width width 1600 'UXGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-width width 1400 'SXGA+))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-width width 1280 'SXGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-width width 1024 'XGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-width width 800 'SVGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-width width 640 'VGA))
- (setq dest (cons ret dest)))
- )
- (t
- (when (setq ret (album-make-spec-by-height height 1536 'QXGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-height height 1200 'UXGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-height height 1050 'SXGA+))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-height height 960 'SXGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-height height 768 'XGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-height height 600 'SVGA))
- (setq dest (cons ret dest)))
- (when (setq ret (album-make-spec-by-height height 480 'VGA))
- (setq dest (cons ret dest)))
- ))
- (setq rest dest)
- (while rest
- (setq spec (car rest))
- (album-write-html dest-dir
- (if prev-file
- (file-name-sans-extension
- (file-name-nondirectory prev-file)))
- (file-name-sans-extension
- (file-name-nondirectory file))
- (if next-file
- (file-name-sans-extension
- (file-name-nondirectory next-file)))
- prev-grade
- (aref spec 1)
- (if (nth 1 rest)
- (aref (nth 1 rest) 1)))
- (call-process "convert" nil nil nil
- "-resize" (format "%d%%" (aref spec 0))
- file
- (expand-file-name
- (concat
- (file-name-sans-extension
- (file-name-nondirectory file)) ".jpg")
- (expand-file-name
- (symbol-name (aref spec 1))
- dest-dir)))
- (setq prev-grade (aref spec 1))
- (setq rest (cdr rest)))
(unless (file-exists-p
- (expand-file-name "fullsize" dest-dir))
+ (expand-file-name "thumbnail" image-dest-dir))
(make-directory
- (expand-file-name "fullsize" dest-dir)))
+ (expand-file-name "thumbnail" image-dest-dir)))
(call-process "convert" nil nil nil
+ "-resize" "160x160>"
file
(expand-file-name
(concat
(file-name-sans-extension
(file-name-nondirectory file)) ".jpg")
- (expand-file-name "fullsize" dest-dir)))
+ (expand-file-name
+ "thumbnail"
+ image-dest-dir)))
+ (setq rest specs)
+ (while rest
+ (setq spec (car rest))
+ (when (or (> width (nth 1 spec))
+ (> height (nth 2 spec)))
+ (album-write-html html-dest-dir
+ (if prev-file
+ (file-name-sans-extension
+ (file-name-nondirectory prev-file)))
+ (file-name-sans-extension
+ (file-name-nondirectory file))
+ (if next-file
+ (file-name-sans-extension
+ (file-name-nondirectory next-file)))
+ prev-grade
+ (car spec) ; (aref spec 1)
+ (if (nth 1 rest)
+ ;; (aref (nth 1 rest) 1)
+ (car (nth 1 rest))
+ )
+ lang image-url-prefix)
+ (call-process "convert" nil nil nil
+ "-resize" (format "%dx%d>" (nth 1 spec)(nth 2 spec))
+ file
+ (expand-file-name
+ (concat
+ (file-name-sans-extension
+ (file-name-nondirectory file)) ".jpg")
+ (expand-file-name
+ (symbol-name (car spec))
+ image-dest-dir)))
+ (setq prev-grade (car spec)))
+ (setq rest (cdr rest)))
+ (unless (file-exists-p
+ (expand-file-name "fullsize" image-dest-dir))
+ (make-directory
+ (expand-file-name "fullsize" image-dest-dir)))
+ (if (string= (downcase (file-name-extension file))
+ "jpg")
+ (call-process "ln" nil nil nil
+ "-f"
+ file
+ (expand-file-name "fullsize" image-dest-dir))
+ (call-process "convert" nil nil nil
+ file
+ (expand-file-name
+ (concat
+ (file-name-sans-extension
+ (file-name-nondirectory file)) ".jpg")
+ (expand-file-name "fullsize" image-dest-dir))))
dest))
-(defun album-convert-images (dest-dir &rest source-images)
- (if (and (consp (car source-images))
- (null (cdr source-images)))
- (setq source-images (car source-images)))
+(defun album-convert-images (image-dest-dir source-images
+ &optional lang title parent-url
+ image-url-prefix html-dest-dir)
+ (unless html-dest-dir
+ (setq html-dest-dir image-dest-dir))
+ ;; (if (and (consp (car source-images))
+ ;; (null (cdr source-images)))
+ ;; (setq source-images (car source-images)))
+ (album-make-thumbnails html-dest-dir source-images
+ lang title image-url-prefix parent-url)
(let (file prev-file)
(while source-images
(setq file (car source-images))
- (album-convert-image dest-dir
- prev-file file (nth 1 source-images))
+ (album-convert-image image-dest-dir
+ prev-file file (nth 1 source-images)
+ lang image-url-prefix html-dest-dir)
(setq prev-file file
source-images (cdr source-images)))))
-(defun album-convert-directory (dest-dir source-dir &rest patterns)
+(defun album-make-thumbnails (html-dest-dir
+ source-images
+ lang title image-url-prefix parent-url)
+ (unless title
+ (setq title
+ (file-name-nondirectory
+ (if (eq (aref html-dest-dir (1- (length html-dest-dir))) ?/)
+ (substring html-dest-dir 0 (1- (length html-dest-dir)))
+ html-dest-dir))))
+ (let (file)
+ (with-temp-buffer
+ (insert
+ "\n")
+ (insert "\n")
+ (insert "\n")
+ (insert (format "%s\n" title))
+ (insert "\n")
+ (insert "\n")
+ (insert (format "%s
\n" title))
+
+ (insert "
+
+")
+ (dolist (image-file source-images)
+ (setq file (file-name-sans-extension
+ (file-name-nondirectory image-file)))
+ (insert "")
+ (insert (format ""
+ file
+ (if image-url-prefix
+ (format "%s/%s/%s"
+ image-url-prefix grade file)
+ file)))
+ (insert "\n"))
+ (insert "
+
+
+")
+ (if parent-url
+ (insert (format "[Return]\n" parent-url)))
+
+ (insert "
+
+
+")
+ (write-region (point-min)(point-max)
+ (expand-file-name "index.html" html-dest-dir)))))
+
+(defun album-convert-directory (image-dest-dir source-dir
+ &optional
+ patterns
+ lang title parent-url
+ image-url-prefix html-dest-dir)
(let (files)
(if patterns
(dolist (pat patterns)
(setq files
(append files
(directory-files source-dir 'full pat))))
- (setq files (directory-files source-dir 'full)))
- (album-convert-images dest-dir files)))
+ (setq files
+ (let (case-fold-search)
+ (directory-files
+ source-dir 'full
+ ".+\\.\\(tiff\\|TIFF\\|jpg\\|JPG\\|jpeg\\|JPEG\\|gif\\|GIF\\|png\\|PNG\\)$"))))
+ (album-convert-images image-dest-dir files
+ lang title parent-url
+ image-url-prefix html-dest-dir)))
+
+(defun album-make-selection-1 (image-dest-dir
+ prev-file file next-file
+ lang image-url-prefix
+ html-dest-dir
+ &optional image-url-spec)
+ (setq file (expand-file-name file))
+ (unless html-dest-dir
+ (setq html-dest-dir image-dest-dir))
+ (let* ((specs '((QVGA 320 240)
+ (VGA 640 480)
+ (SVGA 800 600)
+ (XGA 1024 768)
+ (WXGA 1280 768)
+ (SXGA 1280 1024)
+ (SXGA+ 1400 1050)
+ (WSXGA+ 1680 1050)
+ (UXGA 1600 1200)
+ (WUXGA 1920 1200)
+ (QXGA 2048 1536)
+ (WQXGA 2560 1600)
+ ))
+ prev-grade
+ rest dest)
+ (setq rest specs)
+ (while rest
+ (setq spec (car rest))
+ (album-write-html html-dest-dir
+ (if prev-file
+ (file-name-sans-extension
+ (file-name-nondirectory prev-file)))
+ (file-name-sans-extension
+ (file-name-nondirectory file))
+ (if next-file
+ (file-name-sans-extension
+ (file-name-nondirectory next-file)))
+ prev-grade
+ (car spec)
+ (if (nth 1 rest)
+ (car (nth 1 rest)))
+ lang
+ (if image-url-spec
+ (nth 1 image-url-spec)
+ image-url-prefix)
+ (if image-url-spec
+ (nth 2 image-url-spec))
+ )
+ (setq prev-grade (car spec))
+ (setq rest (cdr rest)))
+ dest))
+
+(defun album-make-selection (image-dest-dir source-images
+ &optional lang title parent-url
+ image-url-prefix html-dest-dir)
+ (unless html-dest-dir
+ (setq html-dest-dir image-dest-dir))
+ ;; (album-make-thumbnails html-dest-dir source-images
+ ;; lang title image-url-prefix parent-url)
+ (let ((i 1)
+ image-url-spec prev-file)
+ (while source-images
+ (setq image-url-spec (car source-images))
+ (setq file (format "%d" i))
+ (album-make-selection-1 image-dest-dir
+ prev-file file (if (nth 1 source-images)
+ (format "%d" (1+ i)))
+ lang image-url-prefix html-dest-dir
+ image-url-spec)
+ (setq prev-file file
+ source-images (cdr source-images))
+ (setq i (1+ i)))))
(provide 'album)