You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails模型中使用DZT gem实现图片转DZI格式?

问题原因

你出现语法错误的核心原因是混淆了命令行CLI指令和Ruby代码的执行上下文:dzt slice image.jpg --output tiles是dzt gem提供的可执行命令行脚本,只能在终端命令行运行,不能直接作为Ruby代码写入IRB、模型文件等Ruby执行环境。

解决方案

提供两种可直接落地的实现方式:

方案1:在Ruby代码中调用系统命令执行CLI

该方案适配你已熟悉的CLI使用方式,改造成本最低:

# 可写在你的图片模型文件中,例:app/models/image.rb
def generate_dzi_tiles(output_dir = "public/tiles/#{self.id}")
  # 提前创建输出目录,避免路径不存在报错
  FileUtils.mkdir_p(output_dir)
  # 用数组形式传参调用system,自动处理特殊字符转义,避免注入风险
  system("bundle", "exec", "dzt", "slice", self.uploaded_file_path, "--output", output_dir)
end

注意事项:

  • 切片属于CPU密集型耗时操作,建议放入Rails Active Job异步执行,不要阻塞用户上传的同步请求
  • 需给Rails进程运行用户开通输出目录的读写权限
  • 生产环境建议用绝对路径指定输入输出目录,避免相对路径寻址错误

方案2:直接调用dzt内部Ruby API

该方案不需要依赖系统命令调用,执行效率更高,异常处理更方便:

# 可写在你的图片模型文件中,例:app/models/image.rb
require "dzt"

def generate_dzi_tiles(output_dir = "public/tiles/#{self.id}")
  FileUtils.mkdir_p(output_dir)
  # 直接调用DZT提供的内部切片方法
  DZT.slice(
    input_path: self.uploaded_file_path,
    output_dir: output_dir,
    # 可选配置,可根据需求调整
    tile_size: 256,
    tile_overlap: 1,
    format: "jpg",
    quality: 75
  )
end

注意事项:

  • 提前确认服务器已安装dzt依赖的图片处理库:ImageMagick 或 libvips
  • 如果使用Active Storage存储上传文件,需要先将文件下载到本地临时路径,再传入input_path参数

内容的提问来源于stack exchange,提问作者Xswede

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 22:24:07