`

基于mini_magick多图片合并/添加水印

 
阅读更多
class ImageService

  require "mini_magick"

  def self.tmp_dir
    dir = "#{Rails.root}/tmp/image"
    FileUtils.mkdir(dir) unless File.exists?(dir)
    dir
  end

  def self.composite(image_paths)
    to_path = "#{tmp_dir}/composite_#{SecureRandom.uuid.to_s.strip}.jpeg"
    montage_commond = image_paths + ["-strip", "-quality", "70", "-tile", "1x#{image_paths.length}", "-geometry", "+0+0", to_path]
    MiniMagick::Tool::Montage.new{|m| m.merge! montage_commond}
    to_path
  end

  def self.compress(image_path, watermark = false)
    to_path = "#{tmp_dir}/compress_#{SecureRandom.uuid.to_s.strip}.jpeg"
    image = MiniMagick::Image.open image_path
    image.combine_options do |b|
      b.strip
      b.quality "60"
    end
    if watermark
      watermark_image = MiniMagick::Image.open("#{Rails.root}/app/assets/images/special_watermark.png")
      watermark_width = (image.width * 0.9).to_i
      watermark_height = (watermark_image.height * (watermark_width / watermark_image.width.to_f)).to_i
      watermark_image.resize "#{watermark_width}x#{watermark_height}"
      image = image.composite(watermark_image) do |c|
        c.gravity 'center'
      end
    end
    image.write to_path
    to_path
  end
end


图片合并
image_paths = files.map{|f| f.tempfile.path}
composite_path = ImageService.composite(image_paths)

File.open(composite_path) do |f|
    attachment.path = f
end


文件格式大小限制
def create_company_change
    files = params[:file_path]
    flag, flash[:msg] = check_file(files)
    unless flag
      redirect_to my_whmall_account_informations_url and return 
    else
      #todo
   end
end
def check_file(files)
    max_size = 1024 * 1024 * 3 #3M
    file_type = ['image/gif ', 'image/png', 'image/jpeg', 'application/pdf']
    return false, '上传文件不能为空' if files.blank?
    files.each do |file|
       return false, '文件不能大于3M' if file.size > max_size
       return false, '可上传的图片格式将限于jpg、gif、png和pdf' unless file_type.include? file.content_type
    end
    return true, '变更申请提交成功,请等待审核。'
  end
0
0
分享到:
评论

相关推荐

    Ruby-MiniMagickImageMagick或GraphicsMagick命令行的一个ruby封装

    gem 'mini_magick' ``` 然后运行`bundle install`来安装MiniMagick。 **使用MiniMagick处理图像** MiniMagick的核心操作是`read`、`write`和`process`方法。`read`用于加载图像,`write`用于保存修改后的图像,而`...

    mojo_magick:Ruby的狗简单ImageMagick接口

    使用它添加到您的Gemfile gem 'mojo_magick'在您的ruby代码中要求它require 'mojo_magick'去镇上! 查看几个简单的例子图像调整大小获取图像的大小(假设图像为“ 120wx222h”) dimensions = MojoMagick::get_image...

    mini_magick_crop

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) ...

    PascalMagick-0.4.zip_magick_neversis

    《PascalMagick-0.4.zip:Magick图像处理技术深度解析》 PascalMagick-0.4.zip是一个包含Pascal语言实现的Magick图像处理库的压缩包。这个库,名为“Magick Neversis”,是专门用于图像处理和操作的工具集,它为...

    simple_magick:超级超简单的 ImageMagick 包装器

    将此行添加到应用程序的 Gemfile 中: gem 'simple_magick' 然后执行: $ bundle 支持的版本 Ruby 2.0.0 或更高版本 用法 require 'simple_magick' if SimpleMagick . imagemagick_installed? image = ...

    Magick++.cpp

    linux下采用开源库Magick++实现图片合成,图片添加中英文字体:需要自己下载编译Magick++,如下为部分代码,下载可看完整代码 #include <Magick++.h> #include <Magick++/Image.h> #include <Magick++/Drawable.h> ...

    Magick++实现图片压缩

    在IT领域,图片处理是一项常见的任务,而"Magick++实现图片压缩"的主题涉及到了图像处理库Magick++的应用,特别是在图像压缩和锐化方面的技术。Magick++是ImageMagick库的一部分,它提供了一个C++接口来处理各种图像...

    Magick.NET类库,.net平台操作图片

    Magick.NET是一个强大的开源类库,专为.NET平台设计,用于处理和操作图像。这个类库使得.NET开发者能够轻松地进行各种复杂的图像处理任务,包括转换、裁剪、旋转、调整大小、添加特效以及应用滤镜等。Magick.NET不仅...

    Magick 图片处理

    【标题】"Magick 图片处理"涉及到的核心技术是ImageMagick,这是一款开源的跨平台图像处理工具,用于在命令行中进行各种图像操作,包括但不限于图片转换、编辑、合成以及添加水印等。ImageMagick的强大功能使得它在...

    breakpoint_magick:获取VS代码断点

    例子# Import thingsfrom breakpoint_magick import GetVSCodeBreakpoints# Get a list with VS Code breakpointsbreak_point_list = GetVSCodeBreakpoints ()# Example of processing to new formatprint ( "# ...

    dummy_magick:生成用于开发的虚拟镜像文件

    将此行添加到应用程序的 Gemfile 中: group :development , :test do gem 'dummy_magick' end 然后执行: $ bundle 用法 ## # Generate a dummy image file # # @param width [Integer] The width of the ...

    Magick++_tutorial.pdf

    Magick++ 提供了非常丰富的方法来操作图像,例如调整图像大小、裁剪、旋转、改变图像的对比度和亮度、应用滤镜效果、添加文本和图像水印等等。此外,Magick++ 还支持许多图像格式的读取和写入,这使其成为一个非常...

    Magick.NET图像操作库

    Magick.NET库是基于ImageMagick开源项目构建的,ImageMagick是一个广泛使用的命令行工具集,而Magick.NET则将其功能无缝集成到.NET环境中。 **主要特性:** 1. **多格式支持**:Magick.NET 支持众多图像文件格式,...

    C# Magick.NET

    例如,你可以使用它来加载图片,然后获取该图片的64位签名,这在比较两张图片是否完全相同时非常有用,因为即使微小的变化也会导致签名的不同。这对于图像库的开发和管理,尤其是在需要确保图像未被篡改的情况下,...

    Magick.NET .NET 将PDF转为图片格式(亲测可用)

    .NET 将PDF转换为图片Demo 亲测可用 使用Magick.NET,使用...注:本Demo 是将PDF按页数转换为多张图片(可转换其中某页,最后一页或者第一页需要自己更改代码),不是转换成一张图片(此类需求的勿浪费资源下载,谢谢)

    php使用Image Magick将PDF文件转换为JPG文件的方法

    这是一个非常简单的格式转换代码,可以把.PDF文件转换为.JPG文件,代码要起作用,服务器必须要安装Image Magick 扩展。 $pdf_file = './pdf/demo.pdf'; $save_to = './jpg/demo.jpg'; //make sure that apache has ...

    Android 将一张CMYK模式的图片转换成RGB模式的图片

    我们将基于一个名为`android-lib-magick-master`的开源库进行讲解。 CMYK是一种颜色模型,主要用于印刷行业,因为它能够有效地利用四种颜色油墨来创建丰富的色彩。而RGB模式是电子设备(如显示器)常用的颜色模型,...

    matlab匹配滤波代码-fmri_conncalc:fmri_conncalc

    magick_path /usr/bin param_file params_JSins.csv wroi_file rois_JSins.nii.gz roi_file '' roiinfo_file rois_JSins.csv coregmat_file /INPUTS/coreg_mat.txt \ deffwd_file /INPUTS/y_deffwd.nii.gz \ ct1_...

    Magick++ api文档

    3. **图像合成**:可以将多个图像合并成一个新的图像。这通常通过 `composite()` 方法完成,该方法支持多种合成方式,如叠加、并排等。 4. **图像存储**:使用 `write()` 方法可以将处理后的图像保存到磁盘或流中。...

    C# Magick.NET 7.4.3.0-Q8-AnyCPU

    Magick.NET是一个开源的图像处理库,基于ImageMagick项目,允许开发者在C#环境中轻松地处理图像。"Q8"代表了该版本使用的是8位颜色深度,意味着它可以处理256种颜色级别的图像,适合大多数日常应用场景。"AnyCPU"则...

Global site tag (gtag.js) - Google Analytics