내 Rails 앱에서 사용자는 Carrierwave 및 Amazon S3를 사용하여 이미지를 업로드 할 수 있습니다. 사용자가 기존 이미지를 90도 회전하여 편집 할 수있는 기능을 구현하고 싶습니다.Carrierwave, MiniMagick 및 S3
이 코드의 위치에 대해 혼란스러워합니다. 이미지 업 로더 파일 또는 이미지 컨트롤러에 있습니까? 그리고 어떻게 불려지나요? 나는 이것이 다음과 같이 보일 것이라고 믿습니다 :
image = Image.find(params[:id])
image_obj = MiniMagick::Image.read(image.file)
image_obj.rotate(-90)
image_obj.write(image.file)
그러나 저는 저를 돕기 위해 모범을 찾을 수 없었습니다. 누구든지 올바른 방향으로 포인터를 줄 수 있다면 정말 고맙겠습니다!
편집 자신의 철저한 대응을위한 깊이에
감사합니다! 내 업 로더에서
# image.rb
attr_accessible :rotated
after_save :rotate_image, if: ->(obj){obj.rotated.present? && obj.rotated?}
def rotate_image
self.image_path.recreate_versions!
end
: 내 모델에서
# image_controller.rb:
def rotate
@image = Image.find(params[:id])
@image.rotated = true
@image.save
respond_to do |format|
format.js { render :nothing => true }
end
end
: 내 컨트롤러에서
# image.html.erb:
<%= link_to rotate_image_path(:id => image.id), :remote => true %>
: 내보기에서
: 여기에 내가하고 결국 무엇
# image_uploader.rb
process :rotate_img
def rotate_img
if model.rotated.present? && model.rotated?
manipulate! do |img|
img.rotate '-90'
img
end
end
end
제가 변경 한 유일한 업 로더는 조건 처리를 시도하는 중에 오류가 발생했습니다. rotate_img 메서드 내에 조건을 넣었습니다.
와우 같은 버전의 내부 프로세스를 호출 철저하게 응답 해 주셔서 너무 감사합니다. 나는 이것을 시험해 볼 것이고, 그것이 나를 위해 일하면 정확한 답을 표시 할 것이다! – scientiffic