##// END OF EJS Templates
Merged r16092....
Jean-Philippe Lang -
r15763:d4dcd3a8dc42
parent child
Show More
@@ -1,60 +1,61
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2016 Jean-Philippe Lang
2 # Copyright (C) 2006-2016 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require 'fileutils'
18 require 'fileutils'
19 require 'mimemagic'
19 require 'mimemagic'
20
20
21 module Redmine
21 module Redmine
22 module Thumbnail
22 module Thumbnail
23 extend Redmine::Utils::Shell
23 extend Redmine::Utils::Shell
24
24
25 CONVERT_BIN = (Redmine::Configuration['imagemagick_convert_command'] || 'convert').freeze
25 CONVERT_BIN = (Redmine::Configuration['imagemagick_convert_command'] || 'convert').freeze
26 ALLOWED_TYPES = %w(image/bmp image/gif image/jpeg image/png)
26
27
27 # Generates a thumbnail for the source image to target
28 # Generates a thumbnail for the source image to target
28 def self.generate(source, target, size)
29 def self.generate(source, target, size)
29 return nil unless convert_available?
30 return nil unless convert_available?
30 unless File.exists?(target)
31 unless File.exists?(target)
31 # Make sure we only invoke Imagemagick if this is actually an image
32 # Make sure we only invoke Imagemagick if the file type is allowed
32 unless File.open(source) {|f| MimeMagic.by_magic(f).try(:image?)}
33 unless File.open(source) {|f| ALLOWED_TYPES.include? MimeMagic.by_magic(f).try(:type) }
33 return nil
34 return nil
34 end
35 end
35 directory = File.dirname(target)
36 directory = File.dirname(target)
36 unless File.exists?(directory)
37 unless File.exists?(directory)
37 FileUtils.mkdir_p directory
38 FileUtils.mkdir_p directory
38 end
39 end
39 size_option = "#{size}x#{size}>"
40 size_option = "#{size}x#{size}>"
40 cmd = "#{shell_quote CONVERT_BIN} #{shell_quote source} -thumbnail #{shell_quote size_option} #{shell_quote target}"
41 cmd = "#{shell_quote CONVERT_BIN} #{shell_quote source} -thumbnail #{shell_quote size_option} #{shell_quote target}"
41 unless system(cmd)
42 unless system(cmd)
42 logger.error("Creating thumbnail failed (#{$?}):\nCommand: #{cmd}")
43 logger.error("Creating thumbnail failed (#{$?}):\nCommand: #{cmd}")
43 return nil
44 return nil
44 end
45 end
45 end
46 end
46 target
47 target
47 end
48 end
48
49
49 def self.convert_available?
50 def self.convert_available?
50 return @convert_available if defined?(@convert_available)
51 return @convert_available if defined?(@convert_available)
51 @convert_available = system("#{shell_quote CONVERT_BIN} -version") rescue false
52 @convert_available = system("#{shell_quote CONVERT_BIN} -version") rescue false
52 logger.warn("Imagemagick's convert binary (#{CONVERT_BIN}) not available") unless @convert_available
53 logger.warn("Imagemagick's convert binary (#{CONVERT_BIN}) not available") unless @convert_available
53 @convert_available
54 @convert_available
54 end
55 end
55
56
56 def self.logger
57 def self.logger
57 Rails.logger
58 Rails.logger
58 end
59 end
59 end
60 end
60 end
61 end
General Comments 0
You need to be logged in to leave comments. Login now