精华内容
下载资源
问答
  • 在使用Pillow中的Image.save()方法,使用默认参数保存jpg图片的过程中发现图片被压缩的很严重,导致原来很大的大小变成几十K。这是因为在保存为jpg的过程中,内部使用压缩算法对图片进行的压缩处理。 但是有些时候...

    在使用Pillow中的Image.save()方法,使用默认参数保存jpg图片的过程中发现图片被压缩的很严重,导致原来很大的大小变成几十K。这是因为在保存为jpg的过程中,内部使用压缩算法对图片进行的压缩处理。

    但是有些时候往往需要图片的大小不能变化太大或不能太小。所以在使用此方式时可以加入参数:

    imObj.save(img_name, quality=95)

    quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。

    使用此参数后,图片大小会增加。如果图片的大小还不能满足你的需求,是否还有其他方式去增加图片大小呢?

    通过查阅资料并尝试,发现save方法还有一个可以配合quality使用的参数,能够大大增加图片大小:

    imObj.save(new_name, quality=95, subsampling=0)

    subsampling参数:子采样,通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践。 (参考:https://en.wikipedia.org/wiki/Chroma_subsampling)
    可能的子采样值是0,1和2,对应于4:4:4,4:2:2和4:1:1(或4:2:0?)。

    经过实践将值设为0便可以满足图片大小增大的需求。

    注意: 以上方法的参数只针对于保存为JPG/JPEG格式的图片的情况。

    参考文档:https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html#jpeg

    参考文档:https://pillow.readthedocs.io/en/4.0.x/PIL.html


    有趣有料有温度,和我一起学技术!

    欢迎关注公众号 来思Go,收看更多赖克与甜甜的技术学习日常。

    展开全文
  • FFmpeg 4.0.2 编码YUV为JPG

    万次阅读 2018-08-23 17:05:17
    功能:将YUV编码成JPG FFmpeg:4.0.2 ********************/ #include <iostream> extern "C" { #include <...
    /********************
     功能:将YUV编码成JPG
     FFmpeg:4.0.2
     ********************/
    #include <iostream>
    extern "C"
    {
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libavutil/avutil.h>
    #include <libswscale/swscale.h>
    #include <libavutil/imgutils.h>
    };
    using namespace std;
    
    int EncodeYUVToJPEG(const char* InputFileName, const char* OutputFileName, int in_w, int in_h)
    {
    	FILE *in_file = NULL;                        
    	fopen_s(&in_file, InputFileName, "rb");      //Input File
    
    	//av_register_all();// 4.0.2已弃用
    	/*
    	//Method 1
    	AVFormatContext *pFormatCtx = avformat_alloc_context();
    	//Guess format
    	AVOutputFormat *fmt = av_guess_format("mjpeg", NULL, NULL);
    	pFormatCtx->oformat = fmt;
    	//Output URL
    	if (avio_open(&pFormatCtx->pb, out_file, AVIO_FLAG_READ_WRITE) < 0)
    	{
    		printf("Couldn't open output file.");
    		return -1;
    	}
    	*/
    	//Method 2. More simple
    	AVFormatContext *pFormatCtx = avformat_alloc_context();
    	avformat_alloc_output_context2(&pFormatCtx, NULL, NULL, OutputFileName);
    	AVOutputFormat *fmt = pFormatCtx->oformat;
    
    	AVStream *video_st = avformat_new_stream(pFormatCtx, 0);
    	if (video_st == NULL)
    	{
    		return -1;
    	}
    	// 获取编解码器上下文信息
    	AVCodecContext* pCodecCtx = avcodec_alloc_context3(NULL);
    	//pCodecCtx = video_st->codec;//已弃用
    	if (avcodec_parameters_to_context(pCodecCtx, video_st->codecpar) < 0)
    	{
    		cout << "Copy stream failed!" << endl;
    		return -1;
    	}
    	pCodecCtx->codec_id = fmt->video_codec;
    	pCodecCtx->codec_type = AVMEDIA_TYPE_VIDEO;
    	pCodecCtx->pix_fmt = AV_PIX_FMT_YUVJ420P;
    	pCodecCtx->width = in_w;
    	pCodecCtx->height = in_h;
    	pCodecCtx->time_base.num = 1;
    	pCodecCtx->time_base.den = 25;
    
    	//dump some information
    	av_dump_format(pFormatCtx, 0, OutputFileName, 1);
    
    	AVCodec *pCodec = avcodec_find_encoder(pCodecCtx->codec_id);
    	if (!pCodec)
    	{
    		printf("Codec not found.");
    		return -1;
    	}
    	if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0)
    	{
    		printf("Could not open codec.");
    		return -1;
    	}
    	/*4.0.2中已弃用
    	AVFrame* pictureFrame = av_frame_alloc();
    	size = avpicture_get_size(pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height);
    	picture_buf = (uint8_t *)av_malloc(size);
    	if (!picture_buf)
    	{
    	return -1;
    	}
    	avpicture_fill((AVPicture *)pictureFrame, picture_buf, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height);
    	*/
    	AVFrame* pictureFrame = av_frame_alloc();
    	pictureFrame->width = pCodecCtx->width;
    	pictureFrame->height = pCodecCtx->height;
    	pictureFrame->format = AV_PIX_FMT_YUV420P;
    	int size = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 1);
    	uint8_t *picture_buf = (uint8_t *)av_malloc(size);
    	av_image_fill_arrays(pictureFrame->data, pictureFrame->linesize, picture_buf, AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 1);
    
    	//Write Header
    	avformat_write_header(pFormatCtx, NULL);
    
    	int y_size = pCodecCtx->width * pCodecCtx->height;
    	AVPacket *pkt = av_packet_alloc();
    	av_new_packet(pkt, y_size * 3);
    	//Read YUV
    	if (fread(picture_buf, 1, y_size * 3 / 2, in_file) <= 0)
    	{
    		printf("Could not read input file.");
    		return -1;
    	}
    	pictureFrame->data[0] = picture_buf;					// Y
    	pictureFrame->data[1] = picture_buf + y_size;			// U 
    	pictureFrame->data[2] = picture_buf + y_size * 5 / 4;	// V
    	/// Encode / 
    	/*4.0.2中已弃用
    	int ret = 0;
    	int got_picture = 0;
    	ret = avcodec_encode_video2(pCodecCtx, &pkt, pictureFrame, &got_picture);
    	if (ret < 0) 
    	{
    		printf("Encode Error.\n");
    		return -1;
    	}
    	if (got_picture == 1) 
    	{
    		pkt.stream_index = video_st->index;
    		ret = av_write_frame(pFormatCtx, &pkt);
    	}
    	av_free_packet(&pkt);
    	*/
    	int ret = avcodec_send_frame(pCodecCtx, pictureFrame);
    	while (ret >= 0)
    	{
    		pkt->stream_index = video_st->index;
    		ret = avcodec_receive_packet(pCodecCtx, pkt);
    		if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
    		{
    			return -1;
    		}
    		else if (ret < 0)
    		{
    			fprintf(stderr, "Error during encoding\n");
    			exit(1);
    		}
    		av_write_frame(pFormatCtx, pkt);
    	}
    	av_packet_unref(pkt);
    	/// Encode  
    	//Write Trailer
    	av_write_trailer(pFormatCtx);
    
    	printf("Encode Successful.\n");
    
    	if (video_st)
    	{
    		//avcodec_close(video_st->codec);
    		av_free(pictureFrame);
    		av_free(picture_buf);
    	}
    	//avio_close(pFormatCtx->pb);//Method 1
    	avformat_free_context(pFormatCtx);
    	fclose(in_file);
    	return 0;
    }
    int main()
    {
    	const char* OutputFileName = "../JPG/test.jpg";
    	const char* InputFileName = "../YUV/test.yuv";
    	int in_w = 352, in_h = 288;
    	EncodeYUVToJPEG(InputFileName, OutputFileName, in_w, in_h);
    	return getchar();
    }
    

    *【注】如果你觉得此文不错,可以考虑打赏我哦,您的打赏将是我更新的最大动力,非常感谢。(打赏也是基于自愿原则的哦( ̄︶ ̄))

    在这里插入图片描述

    展开全文
  •  jpg2png #!/bin/bash # convert jpeg files to png files # usage: jpg2png &lt;file&gt;... for f in "$@" do sips -s format png --out "${f%.*}.png" "$f" done ...

    搞个小脚本,简单实现

     jpg2png

    #!/bin/bash
    # convert jpeg files to png files
    # usage: jpg2png <file>...
    
    for f in "$@"
    do
        sips -s format png --out "${f%.*}.png" "$f"
    done

    png2jpg

    #!/bin/bash
    # convert png files to jpeg files
    # usage: png2jpg <file>...
    
    for f in "$@"
    do
        sips -s format jpeg --out "${f%.*}.jpg" "$f"
    done

     

    展开全文
  • 对于jpg图片大家一定都不陌生,是我们平时生活中经常使用到的图片,也是最常见的一种图片格式,像平时我们手机拍摄出来的照片一般就是jpg格式的,虽然jpg格式的图片一般比较小,但是在使用一些高清大图的时候也会...

    对于jpg图片大家一定都不陌生,是我们平时生活中经常使用到的图片,也是最常见的一种图片格式,像平时我们手机拍摄出来的照片一般就是jpg格式的,虽然jpg格式的图片一般比较小,但是在使用一些高清大图的时候也会出现图片体积超过系统限制的情况,这时候就需要进行jpg压缩https://www.yasuotu.com/jpg)了,下面来给大家分享一个又快又简单的jpg图片压缩办法,看完你就学会如何压缩jpg图片了。

    1.打开压缩图网站,选择jpg压缩功能。

    在这里插入图片描述

    2.点击选择图片压缩按钮即可上传图片,这里给大家分享一个小技巧,压缩图支持一次同时压缩6张图片,如果还有更多图片需要压缩可以选择批量云端压缩功能,一次最多压缩60张图片,非常适合有多张图片需要处理的小伙伴。图片上传后,在上方菜单栏可以输入参数调整图片的宽、高尺寸以及压缩等级。

    在这里插入图片描述

    3.图片参数调整完毕后,点击开始上传即可自动开始压缩,压缩完成后点击保存本地即可保存图片。

    在这里插入图片描述

    这样就完成了jpg图片压缩,这里要注意的是当图片的宽、高同时设置的时候,压缩图会自动按照最佳宽高比来缩放图片防止图片出现变形的情况,所以会出现缩放后的图片宽高数值与预设不符的情况;在设置压缩等级时,压缩等级越低则图片体积越小,反之则图片越清晰,具体如何选择需要根据图片的压缩情况来决定。

    现在大家学会如何进行jpg压缩了吗?压缩图是一款非常实用的在线图片处理工具,支持对jpg、png、gif等格式的图片进行在线压缩,同时还提供包括图片裁剪、图片改大小等多种图片在线处理功能,快来试试吧!

    展开全文
  • HEIF转JPG

    千次阅读 2019-01-29 21:27:59
    在浏览器上,目前缺省不能显示heif格式的图片,需要转换成jpg 在网上查资料,libheif可以实现这个功能。 然后,查到如果转换成jpg,需要libde265和jpeg库。 如果需要将jpg转换成heif,需要x265库 将这些库在windows上...
  • MFC显示JPG图片

    千次下载 热门讨论 2014-08-03 15:58:37
    MFC显示JPG、BMP、GIF图片等, 注意,代码中没有是否DC, 实际使用中,记得是否DC,不然会导致内存泄露。 ReleaseDC(pDC);
  • BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点

    万次阅读 多人点赞 2019-10-02 20:26:51
    一张图片可以储存为多种格式,为什么有的几十KB,有的几百MB,有...在项目开发的过程中经常会读取或保存图像文件,不同类型的图像特点不同,适用的范围也不同,简要介绍BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点。
  • 永久免费无水印 Heic转JPG小工具

    万次阅读 多人点赞 2019-06-17 12:39:55
    提取码:njdl 自己封装的小工具,懒得写图形界面,...使用方法:将 exe程序放到 .heic文件同级目录下,双击运行即可完成转换,自动生成同名 .jpg文件 运行时: 结果: 注意: 1、如已存在同名 ...
  • jpg与png图片的优缺点

    万次阅读 2018-12-28 20:28:38
    jpg 优点:尺寸较小,节省空间;打开速度快 缺点:有损格式,在修图时不断保存会导致图片质量不断降低;不支持透明 png 优点:无损格式,不论保存多少次,理论上图片质量都不会受任何影响;支持透明 缺点:尺寸...
  • heic to jpg

    千次阅读 2019-05-09 10:08:20
    heic to jpg heic:https://baike.baidu.com/item/HEIC/10444257jpg: https://baike.baidu.com/item/JPEG%E6%A0%BC%E5%BC%8F/3462770HEIF & HEVC 研究  ...
  • python爬虫-正则表达式识别jpgJPG

    千次阅读 2019-09-11 18:08:33
    获取百度图片 举例 这是一个百度图片的图片地址,我们想要保存这张图片需要一个正则来截取我们需要的内容 ...gp=0.jpg", 我需要从上边的内容里截取出以下内容 http:\/\/img0.imgtn.bdimg.com\/it...
  • jpg和png

    千次阅读 2018-05-08 15:44:30
    jpg是有损图片的压缩类型,有损压缩方式会去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像质量。jpg对于存储空间是比较小的,但他...
  • jpg格式图片隐写

    千次阅读 2019-05-04 11:39:55
    本人小白,感觉数据隐写很有意思,有了研究的冲动,参考大佬们的文章,慢慢进步,附带加上自己的一些新得体会, 数据隐写,首先应该知道怎么写...然后调用dos命令copy \b 2.txt+1.jpg 3.jpg 改行代码作用是将图片...
  • PPM图像转JPG

    千次阅读 2019-04-04 16:50:39
    由于项目需要,做了PPM与JPG图像格式相互转换 最简单的转换是python代码,如下: from PIL import Image img = Image.open("xxx.ppm") img.save("xxx.jpg") img.show() 上面是PPM转JPGJPG转PPM只需将名字相应...
  • svg转jpg

    千次阅读 2018-07-18 13:46:35
    方法1、使用格式工厂 失败! 方法2、使用Illustrator “导出为”jpg即可,不是“存储为”。 svg转png,同理。
  • java获取jpg图片信息-有损JPG图片处理

    千次阅读 2017-07-17 14:57:16
    java在进行jpg图片处理时,比如读取本地或者网络图片的长宽、大小等信息,如果jpg图片受损,那么会抛出异常,这时可以先转换成cmyk模式后再进行。 try { // 图片处理 picture = new File("图片url"); sourceImg ...
  • jpg转bmp&bmp转jpg

    千次阅读 2012-07-07 18:43:38
    由于项目需要查询了一下jpg转bmp和bmp转jpg的相关知识  jpg转bmp在网上找到了网友的代码,进行了修改下,顺利实现了。  bmp转jpg,利用libjpeg库,也顺利实现了。    还没来得及仔细查看原理
  • JPG转CAD,JPG图片如何转换成CAD图纸?就更是常见了。若是不使用专门的转换器,是否也能转换完成呢?今天小编就在此给大家演示一下。 步骤一:首先需要我们在电脑端安装迅捷CAD编辑器标准版。 步骤二:运行迅捷...
  • 如果我们需要某个PDF文件转换成图片时,那么,PDF怎么转换成JPG图片呢?下面给大家一个福利,快速解决PDF转换问题。 方法/步骤:  我们在将pdf转换jpg之前,肯定要先打开转换工具,这里为大家安利一个在线转换...
  • SEO关键字:图片格式转换 JPG图片转gif动画 GIF动画转JPG图片 玉念聿辉 吴明辉 深圳市奥捷迅科技 SEO描述:在后台开发时,我们往往会涉及到图片的转换等相关工作,下面来分享两个简单而又使用的功能,复制站体...
  • QPixmap不能读取jpg图像 QImage不能读取jpg图像
  • 二进制读取jpg和写jpg

    千次阅读 2015-09-01 20:50:16
    代码 #include "stdafx.h" #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) ... string strpath = "D:\\Dtest5\\Readjpg\\1.jpg"; string strR1 = "D:\\Dtest
  • 获取文件的后缀名 .jpg或者jpg都可以

    千次阅读 2016-11-16 17:51:26
    获取文件的后缀名 .jpg或者jpg都可以 $file='abc.exe.jpg'; echo ""; echo strrchr($file,'.').'';//这个是使用的系统函数,查找的文件名 echo strrev(strstr(strrev($file),'.',true)).''; //strstr()返回的是字符...
  • jpg图像数据重组修复工具

    千次下载 热门讨论 2011-02-14 21:50:51
    可以对损坏的jpg图像进行重新组合修复的工具,尤其对删除后恢复的残缺图像修复效果最好。
  • Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图 主要功能:按图斑批量出图 实际应用案例:有一个卫片图斑层(1、2、3卫片图斑),按1 2 3每个图斑出一个JPG图 主要参考文档:...
  • 文件格式之jpg

    千次阅读 2017-07-03 11:27:41
    常常会用到jpg格式的图片,在存储图片格式时,一般是首选jpg,然后是png,bmp。最近在用人脸数据集时,MsCeleb是jpg格式的图片,Megaface是png格式的图片。 求助百度百科,成功,地址,求助wikipedia成功,地址 jpg ...
  • .jpg & .jpeg 区别

    千次阅读 2017-10-28 14:29:15
    总结.jpg 与 .jpeg 没有区别。区分JPEG 是 全名、正式扩展名 。但 .jpg 的写法 更流行 。
  • 请问如何用c语言从jpg图片读取出yuv420sp nv21格式的信息(jpg转nv21),尽量不依赖别的库,或者使用libjpeg库
  • 下面代码能够实现图片的批量转化,我使用了jpg转png和png转jpg。 # -*- coding: utf-8 -*- """ Created on Fri Jul 19 10:39:03 2019 @author: wsb """ import cv2 import os print('--------------------------...
  • svg与png/jpg快速转换

    万次阅读 2018-05-30 15:46:30
    快速转换方法: 将.svg 格式的图片,下载保存到本地; 本地双击该图片,任意浏览器打开查看; 对准图片,单击鼠标右键,选择“ 图片另存为 ” 然后选择图片另存格式为:png,或者 jpg; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 188,366
精华内容 75,346
关键字:

jpg