javatif格式的简单介绍
今天给各位分享javatif格式的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 实现 tif图片(多页的)转换成jpg
- 2、java生成TIFF图像用于传真。
- 3、java给tif格式图片加文字水印?
- 4、裁剪大tif格式文件的问题(java语言实现)
- 5、Java如何把一个PDF转为tif
java 实现 tif图片(多页的)转换成jpg
多页单个tif文件转换为多个jpg文件
需要官方的一些包支持(具体参考源码),上网找找即可。
源码:
-------------------------
import java.io.*;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.TIFFEncodeParam;
import com.sun.media.jai.codec.TIFFDecodeParam;
import com.sun.media.jai.codec.JPEGEncodeParam;
import java.awt.image.RenderedImage;
import javax.media.jai.RenderedOp;
import javax.media.jai.JAI;
import java.awt.image.renderable.ParameterBlock;
public class MultiPageRead {
public static void main(String[] args) throws IOException {
new MultiPageRead().doitJAI();
}
public void doitJAI() throws IOException {
FileSeekableStream ss = new FileSeekableStream("./zhaoming.tif");
TIFFDecodeParam param0 = null;
TIFFEncodeParam param = new TIFFEncodeParam();
JPEGEncodeParam param1 = new JPEGEncodeParam();
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", ss, param0);
int count = dec.getNumPages();
param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
param.setLittleEndian(false); // Intel
System.out.println("This TIF has " + count + " image(s)");
for (int i = 0; i count; i++) {
RenderedImage page = dec.decodeAsRenderedImage(i);
File f = new File("./fk_" + i + ".jpg");
System.out.println("Saving " + f.getCanonicalPath());
ParameterBlock pb = new ParameterBlock();
pb.addSource(page);
pb.add(f.toString());
pb.add("JPEG");
pb.add(param1);
//JAI.create("filestore",pb);
RenderedOp r = JAI.create("filestore",pb);
r.dispose();
//RenderedOp op = JAI.create("filestore", page, "./zhaoming_" + i + ".jpg", "JPEG", param1);
}
}
}
java生成TIFF图像用于传真。
jpg和jpeg是有损压缩
bmp是位图
gif是无损压缩,一般用于动画
BMP位图格式(文件扩展名为BMP)
它是用于WINDOWS和OS/2的位图(BITMAP)格式,文件几乎不压缩,占用磁盘空间较大,它的颜色存储格式有1位、4位、8位及24位。开发WINDO-WS环境下的软件时,BMP格式是最不容易出问题的格式,并且DOS与WINDO-WS环境下的图象处理软件都支持该格式,因此,该格式是当今应用比较广泛的一种格式。但缺点是该格式文件比较大,所以只能应用在单机上,不受网络欢迎。
COMPUSERVE GIF格式(文件扩展名为GIF)
这种格式是由COMPUSERVER公司设计的,GIF是GRAPHICS INTER CHA-NGE FORMAT的缩写,分为87a及89a两种版本,存储格式由1位到8位。GIF格式是经过压缩的格式,磁盘空间占用较少。由于它是制作2D动画软件Animator早期支持的文件格式,所以该格式曾被广泛使用。但由于8位存储格式的限制,使其不能存储超过256色的图象。虽然如此,但该图形格式却在Internet上被广泛地应用,原因主要有两个:1、256种颜色已经较能满足Internet上的主页图形需要。2、该格式生成的文件比较地小,适合像Internet这样的网络环境传输和使用。
意思相同,就像htm和html是同一意思一样,
JPEG=JPG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。比如可以把1.37Mb的BMP位图文件压缩至20.3KB。当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
JPEG格式是目前网络上最流行的图像格式,是可以把文件压缩到最小的格式,在 Photoshop软件中以JPEG格式储存时,提供11级压缩级别,以0—10级表示。其中0级压缩比最高,图像品质最差。即使采用细节几乎无损的10 级质量保存时,压缩比也可达 5:1。以BMP格式保存时得到4.28MB图像文件,在采用JPG格式保存时,其文件仅为178KB,压缩比达到24:1。经过多次比较,采用第8级压缩为存储空间与图像质量兼得的最佳比例。
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。
PNG图片文件一般应用于JAVA程序中,或网页或S60程序中是因为它压缩比高,生成文件容量小。
tiff我也没听说过,搜到了,太多不贴了,在这
dib也没听过,直接自己看详细的吧
你说的那个buf更是搜都搜不到
java给tif格式图片加文字水印?
package com.coderli.image;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("restriction")
public final class ImageUtils {
public ImageUtils() {
}
/**
* 打印文字水印图片
*
* @param pressText
* --文字
* @param targetImg --
* 目标图片
* @param fontName --
* 字体名
* @param fontStyle --
* 字体样式
* @param color --
* 字体颜色
* @param fontSize --
* 字体大小
* @param x --
* 偏移量
* @param y
*/
public static void pressText(String pressText, String targetImg,
String fontName, int fontStyle, Color color, int fontSize, int x,
int y) {
try {
File _file = new File(targetImg);
Image src = ImageIO.read(_file);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, width, height, null);
g.setColor(color);
g.setFont(new Font(fontName, fontStyle, fontSize));
g.drawString(pressText, width - fontSize - x, height - fontSize
/ 2 - y);
g.dispose();
FileOutputStream out = new FileOutputStream(targetImg);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
pressText("bbs.coderli.com", "f:/1.tiff", "Times New Romas", Font.PLAIN, Color.BLUE, 22, 150, 20);
}
}
这个方法里用的api是支持tiff格式的,你可以试试。
裁剪大tif格式文件的问题(java语言实现)
用c++实现的,先做一个对话框,一个按钮
void CTifSliceDlg::OnButton1()
{
IFH ifh; // 文件头
WORD ec; // 目录入口个数
DE *de1, *de2; // 源和目的文件的目录入口
DWORD nextIFD; // 下一个IFD偏移
DWORD offset, width, height; // 图像数据偏移、宽度、高度
UpdateData();
long m_x1 = m_x - m_size / 2;
long m_x2 = m_x + m_size / 2 - 1;
long m_y1 = m_y - m_size / 2;
long m_y2 = m_y + m_size / 2 - 1;
FILE *fp1 = fopen("D:/zxz/imagery.tif", "rb"); // 打开源图
FILE *fp2 = fopen("D:/zxz/" + m_filename + ".tif", "wb"); // 打开目标图
fseek(fp1, 0, SEEK_SET);
fread(ifh, sizeof(ifh), 1, fp1); // 读IFH
if ((ifh.byteOrder == 0x4949) (ifh.version == 0x2a)) // 判断字节顺序和版本是否有问题
{
fseek(fp1, ifh.offsetToIFD, SEEK_SET); // 定位到IFD
fread(ec, 2, 1, fp1); // 读目录入口个数
de1 = new DE[ec];
de2 = new DE[ec];
fread(de1, sizeof(DE), ec, fp1); // 读所有目录入口
memcpy(de2, de1, sizeof(DE) * ec); // 复制为目标图的目录入口
fread(nextIFD, 4, 1, fp1); // 读下一个IFD偏移
if (nextIFD == 0) // 为0表示没有下一个IFD
{
fwrite(ifh, sizeof(ifh), 1, fp2); // IFH写入目标图
fwrite(ec, 2, 1, fp2); // 目录入口个数写入目标图
for (int i = 0; i ec; i++)
{
switch (de2[i].tag)
{
case 256: //宽度
de2[i].valueOffset = m_x2 - m_x1 + 1; // 修改目标图宽度
width = de1[i].valueOffset; // 取源图宽度
break;
case 257: //高度
de2[i].valueOffset = m_y2 - m_y1 + 1; // 修改目标图高度度
height = de1[i].valueOffset; // 取源图高度
break;
case 273: //图像数据偏移
offset = de2[i].valueOffset; // 取源图图像数据偏移
break;
case 278: //图像数据行数
de2[i].valueOffset = m_y2 - m_y1 + 1; // 修改目标图图像数据行数
break;
case 279: //图像数据字节数
de2[i].valueOffset = (m_x2 - m_x1 + 1) * (m_y2 - m_y1 + 1); // 修改目标图图像数据字节数
break;
}
}
fwrite(de2, sizeof(DE), ec, fp2); // 将目录入口写入目标图
fwrite(nextIFD, 4, 1, fp2); // 将下一个IFD偏移写入目标图
long curpos = ftell(fp1);
char *buf = new char[offset - curpos];
fread(buf, offset - curpos, 1, fp1); // 读源图当前位置到图像数据之间的全部字节
fwrite(buf, offset - curpos, 1, fp2); // 写入目标图
delete[] buf;
buf = new char[m_x2 - m_x1 + 1];
for (i = m_y1; i = m_y2; i++)
{
fseek(fp1, offset + (i * width + m_x1), SEEK_SET); // 定位到图像第i行,m_x1处
fread(buf, m_x2 - m_x1 + 1, 1, fp1); // 读m_x1到m_x2之间的数据
fwrite(buf, m_x2 - m_x1 + 1, 1, fp2); // 写入目标图
}
delete[] buf;
}
else
{
MessageBox("文件格式不正确!");
}
delete[] de1;
delete[] de2;
}
else
{
MessageBox("文件格式不正确!");
}
fclose(fp1);
fclose(fp2);
MessageBox("切片成功!");
}
Java如何把一个PDF转为tif
安装Office时,默认安装Microsoft Office Document Image Writer组件(没有重新添加),在Word中,选文件——打印——打印机选“Microsoft Office Document Image Writer”——属性——高级——输入格式选“TIFF-黑白传真”——设置默认输入的文件夹——确定——确定,打印完成后,将输出到刚设置的默认文件夹中。
关于javatif格式和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-02,除非注明,否则均为
原创文章,转载请注明出处。