문제

나는 현재 인터넷의 다른 사람과 유사한 사용자 정의 이미지 자르기 시스템을 코딩하려고 노력하고 있는데, 사용자가 자르기 영역을 선택한 다음 그에 따라 이미지를 자르고 있습니다. 응용 프로그램은 레일에 있으며 Amazon S3와 함께 페이퍼 클립을 사용하여 파일을 저장하고 있습니다. Rmagick이 S3에서 파일을 적절하게 자르도록하는 데 많은 어려움이 있습니다. 다음은 현재 코드 (작동하지 않음)입니다.

   if params[:width].to_i > 0 and params[:height].to_i > 0 then
      photo = Photo.find(params[:id])
      image_data = Net::HTTP.get_response(URI.parse(photo.photo.url(:big))).body
      orig_img = Magick::ImageList.new
      orig_img.from_blob(image_data)

      args = [params[:x1].to_i, params[:y1].to_i, params[:width].to_i, params[:height].to_i]
      orig_img.crop!(*args)
      photo.update_attributes({:photo => orig_img.to_blob})

      photo.photo.reprocess!
      photo.save
    end

주요 문제는 자른 이미지가 종이 클립을 통해 S3에 다시 업로드되지 않아 제대로 자르지 않는다는 것입니다. 누가 전에 종이 클립으로 이와 같은 것을 시도한 사람이 있습니까? 이것은 불가능할 수도 있지만 어떤 도움도 크게 높이 평가 될 것입니다.

도움이 되었습니까?

해결책

당분간이 문제를 다음과 같이 해결할 수있었습니다.

  photo = Photo.find(params[:id])
  image_data = Net::HTTP.get_response(URI.parse(photo.photo.url(:big))).body
  orig_img = Magick::ImageList.new
  orig_img.from_blob(image_data)

  args = [params[:x1].to_i, params[:y1].to_i, params[:width].to_i, params[:height].to_i]
  orig_img.crop!(*args)

  tmp_img = Tempfile.new("image_data")
  orig_img.format = "png"
  tmp_img.write(orig_img.to_blob)
  photo.photo = tmp_img
  tmp_img.close

  photo.photo.reprocess!
  photo.save

여기서 주요 관심사는 새로운 임시 파일을 만드는 속도 히트입니다. 아마도 우리는 고유 한 사용자 정의 인터페이스를 만들어야 할 것입니다. 바라건대 이것은 비슷한 문제를 해결하는 사람들에게 좋은 출발점이 될 수 있기를 바랍니다.

편집 : 템 파일은 빠른 참고 사항에 불과합니다.

다른 팁

실제 파일을 작성하기 전에 모델의 일부 attr_accessors를 정의하고 컨트롤러 작업에 설정할 수 있습니다. 아래가 작동해야합니다 ..

class Poodle < ActiveRecord::Base
  has_attached_file :avatar, :styles => Proc.new{|a| a.instance.get_styles}
  attr_accessor :width, :height


  def get_styles(style = "medium")
    return {style.to_sym => [self.width, self.height].join("x") + ">" }
  end
 end

자세히 살펴보고 싶을 수도 있습니다 종이 클립 프로세서.

나는 실제로 내 코드에서 같은 문제가 있고 내 TODO 목록에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top