Index: openacs-4/packages/acs-content-repository/tcl/image-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/tcl/image-procs.tcl,v diff -u -N -r1.9.4.3 -r1.9.4.4 --- openacs-4/packages/acs-content-repository/tcl/image-procs.tcl 8 Sep 2014 08:36:40 -0000 1.9.4.3 +++ openacs-4/packages/acs-content-repository/tcl/image-procs.tcl 14 Apr 2015 10:23:16 -0000 1.9.4.4 @@ -101,18 +101,16 @@ @param filename Full path to file in the filesystem - @return List of width height mime_type in array get format - - @author Dave Bauer - @creation-date 2006-08-27 + @return List of width, height, and mime_type } { - if {![catch {set info [image::imagemagick_identify -filename $filename]} errmsg]} { - return $info - } else { - set size [image::ns_size -filename $filename] - set mime_type [image::filename_mime_type -filename $filename] + # First try to get it via built-in support. If this fails, use + # image magic. + set size [image::ns_size -filename $filename] + if {[lindex $size 0] ne ""} { + set mime_type [image::mime_type -filename $filename] return [concat $size $mime_type] } + return [image::imagemagick_identify -filename $filename] } ad_proc -public image::get_file_info_array { @@ -132,10 +130,8 @@ @see image::get_info } { upvar $array_name local_array - set info [image::get_file_info -filename $filename] - set local_array(width) [lindex $info 0] - set local_array(height) [lindex $info 1] - set local_array(mime_type) [lindex $info 2] + lassign [image::get_file_info -filename $filename] \ + local_array(width) local_array(height) local_array(mime_type) } ad_proc -public image::get_file_dimensions { @@ -156,13 +152,14 @@ @creation-date 2006-08-28 @author Dave Bauer (dave@solutiongrove.com) } { - if {[catch {set size [image::imagemagick_file_dimensions -filename $filename]} errmsg]} { - set size [image::ns_size -filename $filename -mime_type $mime_type] + set size [image::ns_size -filename $filename -mime_type $mime_type] + if {[lindex $size 0] eq ""} { + catch {set size [image::imagemagick_file_dimensions -filename $filename]} } return $size } -ad_proc -public image::imagmagick_identify { +ad_proc -public image::imagemagick_identify { -filename } { Get width height and mime type from imagemagick @@ -174,10 +171,11 @@ @author Dave Bauer (dave@solutiongrove.com) @creation-date 2006-08-27 } { - if { [ catch {set out [exec [parameter::get -parameter ImageMagickPath]/identify -format "%w %h %m %k %q %#" $file]} errMsg]} { + if { [ catch {set out [exec [image::identify_binary] \ + -format "%w %h %m %k %q %#" $filename]} errMsg]} { return -code error $errMsg - } - foreach {width height type} [split $out { }] {} + } + lassign $out width height type switch $type { JPG - JPEG { set mime_type image/jpeg @@ -208,7 +206,7 @@ @author Dave Bauer (dave@solutiongrove.com) @creation-date 2006-08-27 } { - set geometry [exec [image::identify_binary] -size geometry $filename] + set geometry [exec [image::identify_binary] -size %w $filename] set width "" set height "" regexp {(\d+)x(\d+)} $geometry x width height @@ -243,40 +241,74 @@ -default "/usr/bin/convert"] } -ad_proc -public image::ns_size { +if {[ns_info name] eq "NaviServer"} { + ad_proc -public image::ns_size { + -filename + {-mime_type ""} + } { + Use ns_gifsize/ns_jpegsize to try to get the size of an image + + @param filename Full path to file in the filesystem + @return List containing width and height + } { + set w "" + set h "" + if {[file exists $filename] && [ns_imgtype $filename] ne "unknown"} { + lassign [ns_imgsize $filename] w h + } + return [list $w $h] + } +} else { + ad_proc -public image::ns_size { + -filename + {-mime_type ""} + } { + Use ns_gifsize/ns_jpegsize to try to get the size of an image + + @param filename Full path to file in the filesystem + @return List containing width and height + @author Dave Bauer (dave@solutiongrove.com) + @creation-date 2006-08-27 + } { + switch -glob -- \ + [image::filename_mime_type \ + -filename $filename \ + -mime_type $mime_type] { + *gif { + set size [ns_gifsize $filename] + } + *jpg - + *jpeg { + set size [ns_jpegsize $filename] + } + default { + set size [list "" ""] + } + } + return $size + } +} + +ad_proc -public image::mime_type { -filename - {-mime_type ""} } { - Use ns_gifsize/ns_jpegsize to try to get the size of an image + Use ns-built-in mimetype or image magick if not available - @param filename Full path to file in the filesystem - - @return List in array get format with names of width and height - - @author Dave Bauer (dave@solutiongrove.com) - @creation-date 2006-08-27 + @param filename Filename of image file } { - switch -- \ - [image::filename_mime_type \ - -filename $filename \ - -mime_type $mime_type] { - *gif { - set size [ns_gifsize $filename] - } - *jpg - - *jpeg { - set size [ns_jpegsize $filename] - } - default { - set size [list "" ""] - } - } - return $size + if {[info commands ns_imgmime] ne ""} { + set mime_type [ns_imgmime $filename] + if {$mime_type ne "image/unknown"} { + return $mime_type + } + } + lassign [image::imagemagick_identify] . . mime_type + return $mime_type } ad_proc -public image::filename_mime_type { -filename - -mime_type + {-mime_type ""} } { Use ns_guesstype if we don't know the mime_type