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