Rmagick图形处理(不规则四边)

本文介绍了一种使用Ruby和ImageMagick库进行图片处理的方法,包括图片裁剪、边框添加、图片合成以及文字注释等功能。通过随机生成的坐标点实现图片的不规则裁剪效果,并将裁剪后的图片与其他图片进行合成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

def self.showimg(len,imgname,content)<o:p></o:p>

 cur = 10<o:p></o:p>

 <o:p></o:p>

 canvas = Magick::ImageList.new<o:p></o:p>

 #granite=Magick::ImageList.new.from_blob(imgname)<o:p></o:p>

 #granite=granite.frame(width=20, height=20, x=20, y=20, inner_bevel=3, outer_bevel=1, color='gray75')<o:p></o:p>

 #granite=granite.border(5, 5, 'red')<o:p></o:p>

 <o:p></o:p>

 granitet = Magick::ImageList.new.new_image(500,380)do    <o:p></o:p>

 self.background_color = 'gray'<o:p></o:p>

 end<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

granite =Magick::ImageList.new.from_blob(imgname)<o:p></o:p>

img_y=granite.rows<o:p></o:p>

img_x=granite.columns<o:p></o:p>

points=[1,8]<o:p></o:p>

temp=1<o:p></o:p>

while temp<=10<o:p></o:p>

  points<<rand(10)<o:p></o:p>

  points<<rand(10)+(img_y/10)*(temp-1)<o:p></o:p>

  temp+=1<o:p></o:p>

end<o:p></o:p>

temp=1<o:p></o:p>

while temp<=18<o:p></o:p>

  points<<rand(9)+(img_x/18)*temp<o:p></o:p>

  points<<granite.rows-62+rand(8)<o:p></o:p>

  temp+=1<o:p></o:p>

end<o:p></o:p>

temp=1<o:p></o:p>

while temp<=10<o:p></o:p>

  points<<granite.rows+46+rand(15)<o:p></o:p>

  points<<rand(10)+(img_y/10)*(10-temp)<o:p></o:p>

  temp+=1<o:p></o:p>

end<o:p></o:p>

temp=1<o:p></o:p>

while temp<=18<o:p></o:p>

  points<<rand(10)+(granite.rows/18)*(18-temp)<o:p></o:p>

   points<<rand(11)<o:p></o:p>

  temp+=1<o:p></o:p>

end<o:p></o:p>

pr = Magick::Draw.new<o:p></o:p>

pr.define_clip_path('example') {<o:p></o:p>

    pr.polygon(*points)<o:p></o:p>

    }<o:p></o:p>

pr.clip_path('example')<o:p></o:p>

tf=Magick::ImageList.new("public/images/model1/jitian.gif")<o:p></o:p>

granite = granite.composite(tf,rand(200),rand(200), Magick::OverCompositeOp)<o:p></o:p>

cols = rows = nil<o:p></o:p>

granite.change_geometry("350") do |c,r|<o:p></o:p>

    pr.composite(0,0, c, r, granite)<o:p></o:p>

    cols = c<o:p></o:p>

    rows = r<o:p></o:p>

end<o:p></o:p>

 text = Magick::Draw.new<o:p></o:p>

 canvas.new_image(800,680do    <o:p></o:p>

 self.background_color = 'gray'<o:p></o:p>

 end <o:p></o:p>

  pr.draw(granitet)<o:p></o:p>

  canvas = canvas.composite(granitet,220,220, Magick::InCompositeOp)<o:p></o:p>

  <o:p></o:p>

   #canvas=canvas.border(5, 5, 'red')<o:p></o:p>

   #text=text.stroke_opacity(0.1)<o:p></o:p>

   #text=text.opacity(0.1)<o:p></o:p>

   #text=text.fill_opacity(0.1)<o:p></o:p>

   #tft=Magick::ImageList.new<o:p></o:p>

<o:p> </o:p>

  text.annotate(canvas,0,0,10,10,CGI.unescape(content)) do  <o:p></o:p>

      self.rotation=0<o:p></o:p>

      #self.encoding='gbk'<o:p></o:p>

      self.pointsize = 20<o:p></o:p>

      self.font_weight = Magick::BoldWeight<o:p></o:p>

      self.fill = 'white'<o:p></o:p>

      self.gravity = Magick::SouthEastGravity<o:p></o:p>

  end <o:p></o:p>

  <o:p></o:p>

  @myimage = canvas.to_blob{self.format="jpg"}<o:p></o:p>

  <o:p></o:p>

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值