gpt4 book ai didi

ruby-on-rails - 路径名称包含现有图像 url 的空字节

转载 作者:行者123 更新时间:2023-12-05 06:26:14 24 4
gpt4 key购买 nike

我使用以下代码通过 Dimensions Gem 获取图像的宽度.

file_path = "http://localhost:3000/uploads/resize/avatar/25/ch05.jpg"
width = Dimensions.width(open(file_path).read)

当我将图像 url 放入 url bar 时,它会在浏览器中呈现图像。我想做的是获取图像的宽度。所以谁能知道我做错了什么?

最佳答案

所以您的问题是 Dimensions 需要一个文件路径来确定图像的宽度。 open 将返回一个 StringIO 并且 open(...).read 将返回一个 String 两者都将失败使用 File.open

尺寸#width

def width(path)
io_for(path).width
end

维度#io_for

def io_for(path)
Dimensions(File.open(path, "rb")).tap do |io|
io.read
io.close
end
end

要解决此问题,您可以将图像下载到 Tempfile,然后像这样使用该路径传递给 Dimensions.width

 path = "http://localhost:3000/uploads/resize/avatar/25/ch05.jpg"
t = Tempfile.new # you could add a name but it doesn't matter
t.write(open(path).read) # write the image to the Tempfile
t.close # must close the file before reading it
width = Dimensions.width(t.path) # pass the Tempfile path to Dimensions
t.unlink # deletes the Tempfile

我们可以像这样让它看起来更干净一些:

def get_width_of_url_image(url)
t = Tempfile.new.tap do |f|
f.write(open(url).read)
f.close
end
width = Dimensions.width(t.path)
t.unlink and width
end

get_width_of_url_image("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png")
#=> 272

关于ruby-on-rails - 路径名称包含现有图像 url 的空字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56392828/

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