[mew-dist 27217] Re: 大きな写真
Tetsuya Toda
toda at example.com
2006年 8月 17日 (木) 13:08:04 JST
From: Kazu Yamamoto (山本和彦) <kazu at example.com>
Date: Thu, 17 Aug 2006 10:03:52 +0900 (JST)
> フレームの高さは取れますが、メッセージバッファの高さは取れません。
やはりそうなのですね.
> いい加減なマージンを用意して、各自設定ということになりますが、それでも
> いいのでしょうか?
わたしは決めているウインドウサイズから変更することは滅多に
ないので自分の環境にあったマージンを一度設定して使えれば十分
ではあります.表示速度の問題でリサイズしたくない人もいるかも
知れませんので Resize するかどうかも含めオプションになれば良
いのでは?と思います.
別件ですが,Resize 出来ない画像がありました.手元では PhotoShop
でレタッチしたものや,FinePix で撮った写真が Resize されま
せんでした.PhotoShop は APPE マーカーを使っているようです.
先の URL を信じて SOI, EOI, RSTm 以外はデータサイズを見るよ
うに変更すると Resize 出来ました.ついでに gif にも対応して
みました(添付パッチ).
> #普通、縦方向にはスクロールできるので、幅だけぴったりなら、それでいい
> #ような気もしています。
#スペースバーで画像もスクロール出来るとさらに便利ですね
ちなみに,「画像の表示がが遅くなった」件は,わたしの手元で
は(FreeBSD 6.1R Pen M 1.0GHz),
200KB 2.4MB
旧(JPEG → PNM (サイズ変更) → JPEG): 4.4 10.4
現(JPEG → PNM (サイズ変更): 3.7 9.1
と,むしろ早くなっているようです.
戸田哲也 =^^=
-------------- next part --------------
*** mew-gemacs.el.orig Thu Aug 16 16:42:04 2006
--- mew-gemacs.el Thu Aug 17 12:50:13 2006
***************
*** 150,175 ****
(setq c (char-after))
(forward-char)
(cond
! ((eq c #xd8)
)
! ((eq c #xe0)
! (forward-char 16))
! ((or (eq c #xdb) (eq c #xc4)
! (and (>= c #xe0) (<= c #xed)))
(setq size (char-after))
(forward-char)
(setq size (+ (* size 256) (char-after)))
(forward-char)
(forward-char (- size 2)))
((eq c #xc0)
! (forward-char 5)
! (setq width (char-after))
(forward-char)
! (setq width (+ (* width 256) (char-after)))
(throw 'loop nil))
(t
(throw 'loop nil))))))
! width))
(defun mew-png-width ()
(let (width)
--- 150,210 ----
(setq c (char-after))
(forward-char)
(cond
! ((eq c #xd8) ;SOI
)
! ((eq c #xd9) ;EOI
! )
! ((and (>= c #xd0) (<= c #xd7)) ;RSTm
! )
! ((eq c #xc0)
! (forward-char 5)
! (setq width (char-after))
! (forward-char)
! (setq width (+ (* width 256) (char-after)))
! (throw 'loop nil))
! ((and (>= c #xc1) (<= c #xfe))
(setq size (char-after))
(forward-char)
(setq size (+ (* size 256) (char-after)))
(forward-char)
(forward-char (- size 2)))
+ (t
+ (throw 'loop nil))))))
+ width))
+
+ (defun mew-jpeg-height ()
+ (let (c size height)
+ (save-excursion
+ (catch 'loop
+ (while t
+ (setq c (char-after))
+ (forward-char)
+ (unless (eq c #xff)
+ (throw 'loop nil))
+ (setq c (char-after))
+ (forward-char)
+ (cond
+ ((eq c #xd8) ;SOI
+ )
+ ((eq c #xd9) ;EOI
+ )
+ ((and (>= c #xd0) (<= c #xd7)) ;RSTm
+ )
((eq c #xc0)
! (forward-char 3)
! (setq height (char-after))
(forward-char)
! (setq height (+ (* height 256) (char-after)))
(throw 'loop nil))
+ ((and (>= c #xc1) (<= c #xfe))
+ (setq size (char-after))
+ (forward-char)
+ (setq size (+ (* size 256) (char-after)))
+ (forward-char)
+ (forward-char (- size 2)))
(t
(throw 'loop nil))))))
! height))
(defun mew-png-width ()
(let (width)
***************
*** 182,192 ****
(setq width (+ (* width 256) (char-after)))
width)))
(defvar mew-image-width-margin 45)
(defvar mew-image-alist
! '((jpeg "jpegtopnm" mew-jpeg-width)
! (png "pngtopnm" mew-png-width)))
(defun mew-image-format-ent (format)
(assoc format mew-image-alist))
--- 217,262 ----
(setq width (+ (* width 256) (char-after)))
width)))
+ (defun mew-png-height ()
+ (let (height)
+ (save-excursion
+ (forward-char 14)
+ ;; length is four bytes
+ ;; but we takes lower two bytes
+ (setq height (char-after))
+ (forward-char)
+ (setq height (+ (* height 256) (char-after)))
+ height)))
+
+ (defun mew-gif-width ()
+ (let (width)
+ (save-excursion
+ (forward-char 8)
+ ;; length is four bytes
+ ;; but we takes lower two bytes
+ (setq width (char-after))
+ (forward-char)
+ (setq width (+ (* width 256) (char-after)))
+ width)))
+
+ (defun mew-gif-height ()
+ (let (height)
+ (save-excursion
+ (forward-char 6)
+ ;; length is four bytes
+ ;; but we takes lower two bytes
+ (setq height (char-after))
+ (forward-char)
+ (setq height (+ (* height 256) (char-after)))
+ height)))
+
(defvar mew-image-width-margin 45)
+ (defvar mew-image-height-margin 200)
(defvar mew-image-alist
! '((jpeg "jpegtopnm" mew-jpeg-width mew-jpeg-height)
! (png "pngtopnm" mew-png-width mew-png-height)
! (gif "giftopnm" mew-gif-width mew-gif-height)))
(defun mew-image-format-ent (format)
(assoc format mew-image-alist))
***************
*** 197,216 ****
(defun mew-image-get-func (ent)
(nth 2 ent))
(defun mew-mime-image (cache begin end format)
(message "Loading image...")
(set-buffer (mew-buffer-message))
(let* ((width (- (frame-pixel-width (selected-frame)) mew-image-width-margin))
(ent (mew-image-format-ent format))
(prog (mew-image-get-prog ent))
(func (mew-image-get-func ent))
image-width image)
! (when (and func (fboundp func))
(save-excursion
(set-buffer cache)
(goto-char begin)
(setq image-width (funcall func))))
! (if (and image-width (< width image-width) (mew-which-exec prog))
(with-temp-buffer
(message "Resizing image...")
(insert-buffer-substring cache begin end)
--- 267,295 ----
(defun mew-image-get-func (ent)
(nth 2 ent))
+ (defun mew-image-get-func-height (ent)
+ (nth 3 ent))
+
(defun mew-mime-image (cache begin end format)
(message "Loading image...")
(set-buffer (mew-buffer-message))
(let* ((width (- (frame-pixel-width (selected-frame)) mew-image-width-margin))
+ (height (- (frame-pixel-height (selected-frame)) mew-image-height-margin))
(ent (mew-image-format-ent format))
(prog (mew-image-get-prog ent))
(func (mew-image-get-func ent))
+ (func-height (mew-image-get-func-height ent))
image-width image)
! (when (or (and func (fboundp func)) (and func-height (fboundp func-height)))
(save-excursion
(set-buffer cache)
(goto-char begin)
+ (setq image-height (funcall func-height))
(setq image-width (funcall func))))
!
! (if (and image-width image-height
! (or (< width image-width) (< height image-height))
! (mew-which-exec prog))
(with-temp-buffer
(message "Resizing image...")
(insert-buffer-substring cache begin end)
***************
*** 219,225 ****
t '(t nil) nil)
(call-process-region (point-min) (point-max) "pnmscale"
t '(t nil) nil
! "-xsize" (format "%d" width))
(setq format 'pbm)
(setq image (mew-buffer-substring (point-min) (point-max)))
(message "Resizing image...done"))
--- 298,306 ----
t '(t nil) nil)
(call-process-region (point-min) (point-max) "pnmscale"
t '(t nil) nil
! "-xysize"
! (format "%d" width)
! (format "%d" height))
(setq format 'pbm)
(setq image (mew-buffer-substring (point-min) (point-max)))
(message "Resizing image...done"))
Mew-dist メーリングリストの案内