等分一張11M的jpg用以打印,網(wǎng)上找了半天工具,不是要注冊就是文件過大切不了,索性自己寫代碼搞定!
用的還是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,由于我的原圖是豎向的,寬度不變,按照這個比例很容易算出切成幾份以及每份高度。循環(huán)取原圖對應區(qū)域的RGB信息再設(shè)置給每一份就搞定了。
n * (nh - 200)這里設(shè)置了下一張圖頭的200px和上一張尾重合。有點銜接,看起來易于接受。
拷進idea,右鍵Run AAA。搞定收工回家吃飯!