gpt4 book ai didi

ruby - 使用 Ruby 将 png 图像发布到 pngcrush

转载 作者:可可西里 更新时间:2023-11-01 17:36:09 34 4
gpt4 key购买 nike

在 ruby​​ 中,我想得到与下面的代码相同的结果,但不使用 curl:

curl_output = `curl -X POST -s --form "input=@#{png_image_file};type=image/png" http://pngcrush.com/crush >  #{compressed_png_file}`

我试过这个:

#!/usr/bin/env ruby
require "net/http"
require "uri"

# Image to crush
png_image_path = "./media/images/foo.png"

# Crush with http://pngcrush.com/
png_compress_uri = URI.parse("http://pngcrush.com/crush")
png_image_data = File.read(png_image_path)
req = Net::HTTP.new(png_compress_uri.host, png_compress_uri.port)
headers = {"Content-Type" => "image/png" }
response = req.post(png_compress_uri.path, png_image_data, headers)

p response.body
# => "Input is empty, provide a PNG image."

最佳答案

您的代码的问题是您没有向服务器发送必需的参数(“输入”为 http://pngcrush.com/crush)。这对我有用:

require 'net/http'
require 'uri'

uri = URI.parse('http://pngcrush.com/crush')

form_data = [
['input', File.open('filename.png')]
]

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new uri

# prepare request parameters
request.set_form(form_data, 'multipart/form-data')
response = http.request(request)

# save crushed image
open('crushed.png', 'wb') do |file|
file.write(response.body)
end

但我建议你使用RestClient .它封装了 net/http 和多部分表单数据等很酷的功能,你只需要几行代码就可以完成这项工作:

require 'rest_client'

resp = RestClient.post('http://pngcrush.com/crush',
:input => File.new('filename.png'))

# save crushed image
open('crushed.png', 'wb') do |file|
file.write(resp)
end

使用gem install rest-client 安装它

关于ruby - 使用 Ruby 将 png 图像发布到 pngcrush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820845/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com