scala乱弹:切割图片

2018-09-13  本文已影响0人  小伙比较帅呆

等分一张11M的jpg用以打印,网上找了半天工具,不是要注册就是文件过大切不了,索性自己写代码搞定!

用的还是java的东西。


import java.awt.image.BufferedImage

import javax.imageio.ImageIO

import java.io.{ByteArrayOutputStream, File, FileOutputStream}



object AAA {

  def main(args: Array[String]): Unit ={

    val img = ImageIO.read(new File("C:\\Users\\skype\\Downloads\\aaa-images\\0001.jpg"))

    val width = img.getWidth

    val height = img.getHeight

    val nh = width * 297 / 210

    val x = height / nh

    println(width)

    println(height)

    println(nh)

    println(x)

    (0 to x).toList.foreach{ n =>

      if(((n * nh) - 200) < height){

        println("***")

        println(n)

        val imageResult = new BufferedImage(width, nh, BufferedImage.TYPE_INT_RGB)

        var _imgRGB = new Array[Int](width * nh)

        _imgRGB = img.getRGB(0, n * (nh - 200), width, nh, _imgRGB, 0, width)

        imageResult.setRGB(0, 0, width, nh, _imgRGB, 0, width)

        val out = new ByteArrayOutputStream

        val fos = new FileOutputStream(new File(s"C:\\Users\\skype\\Downloads\\aaa-images\\0001-$n.jpg"))

        ImageIO.write(imageResult, "jpg", out)

        out.writeTo(fos)

        out.flush()

        out.close()

      }

    }

  }

}

A4纸是210*297,由于我的原图是竖向的,宽度不变,按照这个比例很容易算出切成几份以及每份高度。循环取原图对应区域的RGB信息再设置给每一份就搞定了。

n * (nh - 200)这里设置了下一张图头的200px和上一张尾重合。有点衔接,看起来易于接受。

拷进idea,右键Run AAA。搞定收工回家吃饭!

上一篇 下一篇

猜你喜欢

热点阅读