From 05cb20fe9df0041a66f3e979ada6203fff4909aa Mon Sep 17 00:00:00 2001 From: Eric Guo Date: Sun, 28 Feb 2016 17:27:14 +0800 Subject: [PATCH] Using open3 and sent file, also using simplify as it only intent to use in development. --- .../ru_captcha/captcha_controller.rb | 6 +++++- lib/rucaptcha/captcha.rb | 21 +++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/controllers/ru_captcha/captcha_controller.rb b/app/controllers/ru_captcha/captcha_controller.rb index ef4d729..c85afbf 100644 --- a/app/controllers/ru_captcha/captcha_controller.rb +++ b/app/controllers/ru_captcha/captcha_controller.rb @@ -4,7 +4,11 @@ module RuCaptcha headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate' headers['Pragma'] = 'no-cache' - send_data generate_rucaptcha, disposition: 'inline', type: 'image/png' + if Gem.win_platform? + send_file generate_rucaptcha, disposition: 'inline', type: 'image/png' + else + send_data generate_rucaptcha, disposition: 'inline', type: 'image/png' + end end end end diff --git a/lib/rucaptcha/captcha.rb b/lib/rucaptcha/captcha.rb index b0644d3..34f8e3e 100644 --- a/lib/rucaptcha/captcha.rb +++ b/lib/rucaptcha/captcha.rb @@ -60,12 +60,21 @@ module RuCaptcha -implode #{RuCaptcha.config.implode} -trim label:- png:- CODE - command.strip! - pid, stdin, stdout, stderr = POSIX::Spawn.popen4(command) - Process.waitpid(pid) - err = stderr.read - raise "RuCaptcha: #{err.strip}" if err != nil && err.length > 0 - stdout.read + if Gem.win_platform? + png_file_path = Rails.root.join('tmp', 'cache', "#{code}.png") + command = "convert -size #{size} xc:White -gravity Center -weight 12 -pointsize 20 -annotate 0 \"#{code}\" -trim #{png_file_path}" + require 'open3' + _stdout_str, stderr_str = Open3.capture3(command) + raise "RuCaptcha: #{stderr_str.strip}" if stderr_str != nil && stderr_str.length > 0 + png_file_path + else + command.strip! + pid, stdin, stdout, stderr = POSIX::Spawn.popen4(command) + Process.waitpid(pid) + err = stderr.read + raise "RuCaptcha: #{err.strip}" if err != nil && err.length > 0 + stdout.read + end end end end