[RUBY-ON-RAILS] 이미지 사용 루비와 같은 base64로 문자열을 저장하는 방법
RUBY-ON-RAILS이미지 사용 루비와 같은 base64로 문자열을 저장하는 방법
나는 시스템을 출하 USPS 내 루비 레일에 응용 프로그램을 통합하고있다. 당신이 우표 요청을하면 해당 우편 요금을 지불하고는 환불 불가입니다.
우표 요청은 당신에게 발송 라벨입니다 base64로 문자열을 포함하는 XML 응답을 반환합니다.
그러나 나는 (지불 그것이 내가 뭔가 세대 사이의 운송 라벨에 발생하는 경우 내 서버의 이미지로 그 base64로 문자열을 저장할 수 있도록하고 싶습니다, 잘못 될 수 있도록, 뷰에서 발송 라벨을 렌더링 할 수 있어요 그것은) 및 우편을 위해이 새로운 하나를 구입하지 않고 다시 인쇄 할 수 있도록.
다음과 같이 내 첫번째 생각은했다
# Attempt 1
File.open('shipping_label.gif', 'w+') {|f|
f.puts Base64.decode64(base_64_encoded_data)
}
# Attempt 2
File.open('shipping_label.gif', 'w+') {|f|
f.puts Base64.decode64(Base64.decode64(base_64_encoded_data))
}
어느 작품.
해결법
-
==============================
1.IO 번호 둔다을 사용하여, 이미지의 경우와 같은 파일에 바이너리 데이터를 기록 할 때 위험과 최고의 피했다. 당신은 UNIX 또는 OS X와 같은 LF 전용 플랫폼에서 주로 관련이 있지만, Windows와 같은 CRLF 것들에 필수적이다 바이너리 모드로 작성해야한다. # 둔다 IO는 잘못된 파일의 끝에 줄 바꿈을 추가합니다.
IO 번호 둔다을 사용하여, 이미지의 경우와 같은 파일에 바이너리 데이터를 기록 할 때 위험과 최고의 피했다. 당신은 UNIX 또는 OS X와 같은 LF 전용 플랫폼에서 주로 관련이 있지만, Windows와 같은 CRLF 것들에 필수적이다 바이너리 모드로 작성해야한다. # 둔다 IO는 잘못된 파일의 끝에 줄 바꿈을 추가합니다.
가장 좋은 방법은 공모에 올바른 플래그를 지정하는 것입니다 :
File.open('shipping_label.gif', 'wb') do |f| f.write(Base64.decode64(base_64_encoded_data)) end
예를 들어, IO 번호 열려있는 문서 페이지에 주석을 참조하십시오
http://apidock.com/ruby/IO/open/class
-
==============================
2.다른 대답은 아주 가까이 있지만, 일반적으로 그 base64로 스트림은 PNG의 데이터가 포함됩니다 가정합니다. 내가 올바른 파일 확장자를 설정하기 위해 라이브러리 마임 타입을 사용하는 것이 좋습니다 그래서 항상 그런 것은 아니다 :
다른 대답은 아주 가까이 있지만, 일반적으로 그 base64로 스트림은 PNG의 데이터가 포함됩니다 가정합니다. 내가 올바른 파일 확장자를 설정하기 위해 라이브러리 마임 타입을 사용하는 것이 좋습니다 그래서 항상 그런 것은 아니다 :
REGEXP = /\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)/m data_uri_parts = data_url.match(REGEXP) || [] extension = MIME::Types[data_uri_parts[1]].first.preferred_extension file_name = "myfilename.#{extension}" File.open(file_name, 'wb') do |file| file.write(Base64.decode64(data_uri_parts[2])) end
-
==============================
3.
require 'RMagick' data = params[:image_text]# code like this data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABPUAAAI9CAYAAABSTE0XAAAgAElEQVR4Xuy9SXPjytKm6ZwnUbNyHs7Jc7/VV9bW1WXWi9q image_data = Base64.decode64(data['data:image/png;base64,'.length .. -1]) new_file=File.new("somefilename.png", 'wb') new_file.write(image_data)
사진 모델에서 클립을 사용하여 #save : 당신은 파일 Photo.new (영상 이미지)로 이미지를 사용할 칸 후
-
==============================
4.당신이 이미지에 기록해야하는 경우 다음 rmagick 보석을 통해 ImageMagick를 사용합니다.
당신이 이미지에 기록해야하는 경우 다음 rmagick 보석을 통해 ImageMagick를 사용합니다.
http://rmagick.rubyforge.org/
from https://stackoverflow.com/questions/1160741/how-to-save-a-base64-string-as-an-image-using-ruby by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] Gem.source_index는 사용 사양, 사용되지 않습니다. 나는 보석 또는 레일을 다시 설치해야합니까? (0) | 2020.03.01 |
---|---|
[RUBY-ON-RAILS] 레일 사이 (> = 0)을 찾을 수 없습니다 [(젬 :: LoadError) (0) | 2020.03.01 |
[RUBY-ON-RAILS] 당신의 Gemfile이 들러의 이전 버전을 필요로하는 경우 어떻게`install '이다 번들? (0) | 2020.03.01 |
[RUBY-ON-RAILS] 액티브의 find_each 제한 및 주문과 함께 (0) | 2020.02.29 |
[RUBY-ON-RAILS] getaddrinfo는 : 노드 이름도 servname는 제공 여부를 알려 (0) | 2020.02.29 |