2013-11-26 54 views
0

我有一個回形針自定義處理器的幾個問題。回形針自定義處理器不改變圖像類型

在命令行這一行:

$ convert cats.jpg -thumbnail 300x400 -bordercolor white -background black +polaroid cats.png 

成功轉換此:

https://dl.dropboxusercontent.com/u/4233433/cats.jpg

向該:

https://dl.dropboxusercontent.com/u/4233433/cats.png

即JPEG轉換成PNG與transpar恩背景。這正是我想要實現的。

然而,當我嘗試使用回形針我結束了內滑軌(4.0.1)要做到這一點:

[鏈接中發佈註釋]

它改名爲PNG,但實際上是一個JPEG。

我的模型:

class Submission < ActiveRecord::Base 
    has_attached_file :photo, 
       processors: [:polarize], 
       styles: { 
       polarized: { 
        format: 'png', 
        is_polarized: true 
       } 
       } 

    belongs_to :user 
end 

而且我的處理器:

module Paperclip 
    class Polarize < Processor 
    def initialize file, options = {}, attachment = nil 
     super 
     @file   = file 
     @attachment  = attachment 
     @is_polarized = options[:is_polarized] 
     @current_format = File.extname(@file.path) 
     @format   = options[:format] 
     @basename  = File.basename(@file.path, @current_format) 
    end 

    def make 
     temp_file = Tempfile.new([@basename, @format].compact.join(".")) 
     temp_file.binmode 

     if @is_polarized 
     run_string = "convert #{fromfile} -thumbnail 300x400 -bordercolor white -background white +polaroid #{tofile(temp_file)}"  
     Paperclip.run(run_string) 
     end 

     temp_file 
    end 

    def fromfile 
     File.expand_path(@file.path) 
    end 

    def tofile(destination) 
     File.expand_path(destination.path) 
    end 
    end 
end 

在我的數據庫photo_content_typeimage/jpegphoto_file_namecats.jpg時,我會分別預計image/pngcats.png。有任何想法嗎?

UPDATE

錯誤是在這條線

temp_file = Tempfile.new([@basename, @format].compact.join(".")) 

改變它

temp_file = Tempfile.new([@basename, @format]) 

修復的東西。感謝肖恩 - 霜杜克 - 傑克遜

+0

鏈接到第三圖片: https://dl.dropboxusercontent.com/u/4233433/cats-1.png – dwkns

回答

0

看一看網站上的文檔,但可以肯定它應該象下面這樣:

has_attached_file :avatar, :styles => { :thumb => ["32x32#", :png] } 

https://github.com/thoughtbot/paperclip

在後處理

猜你的問題在這裏:

@format   = options[:format] 
@basename  = File.basename(@file.path, @current_format) 
temp_file = Tempfile.new([@basename, @format].compact.join(".")) 
+0

是的,我在文檔中看到。使用其中一個標準處理器(例如:您上面提到的拇指)來更改圖像格式並不是問題,問題是在定製處理器中執行。 – dwkns

+0

你的格式會改變,因爲你有一個加入:格式和基本名稱,很確定問題在哪裏,你有沒有嘗試改變它... –

+0

賓果。問題出現在'Tempfile.new([@ basename,@format] .compact.join(「)。「))'' '[@basename,@format] .compact.join(」。「)'在它自己創建了你期望的'filename.ext',但是然後Tempfile添加了一些隨機字符後'Tempfile.new([@ basename,@format])'works。Thanks。 – dwkns