scala乱弹:切割图片

等分一张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。搞定收工回家吃饭!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容