オレオレ gyazo サーバを JPEG 対応にする

シェアする

Gyazo, 通常は全ての画像を png で保存するんだけど、png は写真やゲームのスクリーンショットなど、色数の多い画像を扱うのにあまり向いていない。なのでそういった画像の場合には jpeg へ変換する様 upload.cgi を修正した。

画像編集には RMagick を利用しています。

#!/home/ryomatsu/.rbenv/shims/ruby
# -*- ruby -*-
#
# $Date$
# $Rev$
#
require 'cgi'
require 'digest/md5'
require 'sdbm'
require 'RMagick'

cgi = CGI.new("html3")

id = cgi.params['id'][0].read
imagedata = cgi.params['imagedata'][0].read
hash = Digest::MD5.hexdigest(imagedata)

create_newid = false
if not id or id == "" then
    id = Digest::MD5.hexdigest(cgi.remote_addr + Time.now.to_s)
    create_newid = true
end

dbm = SDBM.open('db/id',0644)
dbm[hash] = id
dbm.close

filename = "img/#{hash}.png"
File.open(filename,"w").print(imagedata)

if imagedata.bytesize > 100000
    image = Magick::Image.from_blob(imagedata).first
    filename = "img/#{hash}.jpeg"
    image.write(filename)
end

headers = {}
if create_newid then
    headers = {"X-Gyazo-Id"=>id}
end

cgi.out(headers){"http://gyazo.loumo.jp/#{filename}"}

色数の多い、と書いたがあれこれ考えるのが面倒くさいので単純に png のファイルサイズが 100k 超えたら Jpeg に変換したものも保存、クライアントへも Jpeg の URL を返します。

一行目が自分の環境のままだがまあいいか。。。

Sponsored Link

シェアする

フォローする