私が取り組んでいるプロジェクトでは、ファイルのアップロードに CarrierWave を使用しています。DICOM ファイルをアップロードする必要性に対応する新しい要件が導入されました。DICOMファイルには、他の多くのデータに加えて、1 つまたは複数の画像が含まれています。Ruby DICOM gemを使用すると、ファイルから画像を簡単に抽出できます。CarrierWave を使用してアップロードしようとすると、問題が発生します。
アップロードされたファイルから JPEG を抽出し、元の DICOM ファイルの代わりにそのファイルを保存できるようにしたいと考えています。version
アップロードしたファイルを次のように作成してみました。
version :jpeg, :if => :is_dicom? do
process :create_jpeg
end
def is_dicom?(file)
IO.binread(file.to_file, 4, OFFSET) == 'DICM'
end
def create_jpeg
Rails.logger.debug "self is class #{self.class}"
dcm = DICOM::DObject.read(file.path)
image = dcm.image.normalize
end
create_jpeg
私が見つけた別のメソッドに基づいてメソッドを作成しcreate_thumbnail
ましたが、例外処理がなければ、次のように縮小されます。
def create_thumbnail(width, height, gravity = 'Center')
self.resize_to_fill(width, height, gravity)
end
DICOM が正常に読み取られていることをデバッグ コンソールで確認できますが、抽出される JPEG は実際には保存されません。代わりに、元の DICOM と、ファイル名の先頭に「jpeg」が追加されたコピーを取得します。抽出したこの JPEG を保存し、処理した元のファイルを保存したくないことを CarrierWave に伝えるにはどうすればよいですか?