gpt4 book ai didi

ruby-on-rails - 如何使用 Carrierwave 和 MiniMagick 使用多个图像制作图像

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:16 26 4
gpt4 key购买 nike

我有 Image 模型和 Movie 模型,Movie 可以有很多 images。我正在存储图像的 3 个版本,大、中和小。在我的应用程序中,用户可以选择特定尺寸的图像,比如 4 张“中等”尺寸的图像,然后用户可以分享它们。最少 3 张图片,最多 5 张。

我需要用所有选定的 4 张中等大小的图片创建一张图片。我不想单独发送这些图像,我想将其作为单个图像发送。

我正在使用 CarrierwaveMiniMagick

感谢您的帮助!

最佳答案

假设这里真正的问题是关于使用 minimagick 合成图像,这里有一些代码。请注意,我已经向 Movie 添加了一个名为“composite_image”的字段,并且我决定将附加到 Image 的上传程序命名为“file”。

def render_composite_image(source_images, coordinates)
temp_file = TempFile.new(['render_composite_image', '.jpg'])
img = MiniMagick::Image.new(temp_file.path)
img.run_command(:convert, "-size", "#{ COMPOSITE_WIDTH }x#{ COMPOSITE_HEIGHT }", "xc:white", img.path)

source_images.each_with_index do |source_image, i|
resource = MiniMagick::Image.open(source_image.file.path)
img = img.composite(resource) do |composite|
composite.geometry "#{ coordinates[i].x }x#{ coordinates[i].y }"
end
end

img.write(temp_file.path)
self.update_attributes(composite_image: temp_file)
end

关于这段代码的几点说明:

  • source_images 是您要合成在一起的一组图像。

  • coordinates 是一组坐标值,表示您希望每个图像在最终合成中的位置。坐标的索引对应于相应的 source_image 的索引。另请注意,如果坐标为正,则需要包含“+”字符,例如“+50”。 (您可能需要试验才能找到所需的坐标。)

  • 如果您的图像未存储在本地,则需要使用 source_image.file.url 而不是 source_image.file.path

  • 此代码是为在 Movie 模型的上下文中运行而编写的,但它可以移动到您喜欢的任何位置。

关于ruby-on-rails - 如何使用 Carrierwave 和 MiniMagick 使用多个图像制作图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17831609/

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