AI或PS导出cmyk模式的JPEG或jpg图转rgb模式的图jpeg或jpg然后压缩图片

此类需要引入一个包和ISOcoated_v2_300_eci.icc(CMYK的位图);连接为:https://download.csdn.net/download/xiaozukun/11107461import java.awt.color.ColorSpace;import java.awt.color.ICC_ColorSpace;import java.awt.color...
摘要由CSDN通过智能技术生成

此类需要引入一个包和ISOcoated_v2_300_eci.icc(CMYK的位图); 

 连接为:https://download.csdn.net/download/xiaozukun/11107461

import java.awt.color.ColorSpace;
import java.awt.color.ICC_ColorSpace;
import java.awt.color.ICC_Profile;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.imageio.IIOException;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.Sanselan;
import org.apache.sanselan.common.byteSources.ByteSource;
import org.apache.sanselan.common.byteSources.ByteSourceFile;
import org.apache.sanselan.formats.jpeg.JpegImageParser;
import org.apache.sanselan.formats.jpeg.segments.UnknownSegment;

public class ImageTool {

    private static boolean hasAdobeMarker = false;
    private static Log log = LogFactory.getLog(ImageTool.class);
    
    /*
     *返回图片的真实格式,此方法如果读取的图片为svg格式会返回空值
     */
    public static String getRealFormatName(Object object) throws Exception {
        ImageInputStream iis = ImageIO.createImageInputStream(object);
        Iterator<ImageReader> iterator = ImageIO.getImageReaders(iis);
        while (iterator.hasNext()) {
            ImageReader reader = (ImageReader) iterator.next();
            return reader.getFormatName();
        }
        return null;
    }
    
    /*
     *传图片的路径,和要将图片转成的格式
     */
    public static void convertTif(String fileName, String extension) {
        try {
            File file = new File(fileName);
            if (file.exists() == false) {
                System.out.println("File not exist!!!");
                return;
            }
            Buf

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
由于我是AI语言模型,无法实际编写和运行代码,以下是一个C++示例程序,用于解码JPEG像并将其转换为RGB565格式以供显示。它使用了libjpeg库。 ``` #include <stdio.h> #include <jpeglib.h> #define RGB565(r, g, b) (((r) >> 3) << 11 | ((g) >> 2) << 5 | ((b) >> 3)) int main(int argc, char* argv[]) { if (argc < 2) { printf("Usage: %s <filename>\n", argv[0]); return 1; } struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; FILE* infile = fopen(argv[1], "rb"); if (infile == NULL) { printf("Error opening file %s\n", argv[1]); return 1; } cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, infile); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); int row_stride = cinfo.output_width * cinfo.output_components; JSAMPARRAY buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo, JPOOL_IMAGE, row_stride, 1); uint16_t* rgb = new uint16_t[cinfo.output_width * cinfo.output_height]; int i = 0; while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, buffer, 1); for (int j = 0; j < cinfo.output_width * cinfo.output_components; j += cinfo.output_components) { int r = buffer[0][j]; int g = buffer[0][j + 1]; int b = buffer[0][j + 2]; rgb[i++] = RGB565(r, g, b); } } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); fclose(infile); // Display the RGB565 image here delete[] rgb; return 0; } ``` 这个程序首先打开JPEG文件并创建一个解压缩对象。然后,它读取JPEG头和扫描线,并在解压缩期间将扫描线读入缓冲区中。每当读取一行扫描线时,它会将RGB颜色值转换为RGB565格式,并将其存储在一个uint16_t类型的数组中。最后,程序销毁解压缩对象并关闭文件。 最后一步是将RGB565像显示在屏幕上,这需要一个特定于平台的代码,因此这个程序并没有包括它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慧香一格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值