图片压缩代码
1. PNG格式图片怎么压缩到最小
用这个在线图片压缩工具吧,你想把图片文件的大小减到多少都行,比如你的200kb的照片,你直接设置压缩到100K,它马上瞬间就能压缩到100K。而且顶多也就一两秒钟搞定。在线智能压缩图片大小,图片压缩体积宽高,大图缩小
▼ 在线图片智能压缩使用步骤:
一、首先点击加号添加需要压缩的图片。目前已知支持对jpg、png等多种常见的图片格式进行压缩,如果上传图片并压缩成功,则代表支持该图片格式。
二、可以自行修改图片需要被压缩到的最大宽高尺寸,默认为图片原始的宽高尺寸,且宽高比例是自动锁定的。
三、必须设置图片被压缩后,期望输出的图片文件的最大占用空间。(必填项)
四、选择图片生成的算法。默认为混合优先算法,绝大多数情况下使用默认算法即可。
五、压缩的设定值不能小于1Kb,但图片压缩的最终效果可以小于1Kb。
2. html5怎么压缩图片
利用canvas的drawImage方法来绘制图片,并且设置绘制的图片的width跟height,最后再通过canvas的toDataURL方法来生成压缩后的dataUR
下面直接上代码:
html:
[html]view plain
<divclass="head_imgpr">
<emclass="pa"></em>
<imgsrc='../images/icon_touxiang.png'alt=""class="modify_img"/>
<inputid="photo"type="file"accept="image/*"/>
</div>
3. 如何把图片压缩成指定大小
你可以用这种在线的图片压缩工具,就可以把图片文件压缩到你期望的体积大小,比如你将压缩数值设置到100kb,稍等几秒钟之后,在线图片压缩工具就已经把图片的文件大小压缩到最高100kb了。换句话说,你设定压缩到多少kb的期望值,他压缩完的输出图片就是多少kb大小了,非常方便。在线智能图片压缩,压缩图片体积大小
在线图片智能压缩使用步骤:
一、首先点击加号添加需要压缩的图片。目前已知支持对jpg、png、webp、bmp等多种常见的图片格式进行压缩,如果选择图片后正常显示并能够压缩成功,则代表支持该图片格式。
二、可以自行修改图片需要被压缩到的最大宽高尺寸,默认为图片原始的宽高尺寸,并且宽高比例是自动锁定的,确保图片不会变形。
三、必须设置图片被压缩后,期望输出的压缩之后图片文件的最大占用空间,该选项是必填的。
四、选择图片压缩的算法。默认为智能混合压缩算法,绝大多数情况下使用默认算法进行图片压缩即可。
五、当你设置压缩后的大小单位为”Kb“时,压缩大小的设定值不能小于1Kb,但图片压缩后的最终文件大小是可以小于1Kb的。
4. 怎样把图片做成压缩包
详细步骤如下:
1.如下图所示,文件夹里有四张照片
(4)图片压缩代码扩展阅读:
压缩包的作用:
1、节省磁盘空间;
2、可以把多个文件压缩成一个压缩包,此功能在发送邮件时用处比较大,因为邮件附件多个文件通常要一个个的上传,把多个文件压缩成一个压缩包后就可以完成一次上传了;
3、可以把一个大文件分解压缩成多个小压缩包,此功能在文件拷贝中作用比较大,比如所你有个300M的文件需要拷贝到别的电脑中,而你的U盘只有256M,这时候你就可以用压缩软件把文件分成两个150M的压缩包然后分别拷贝就行了;
4、此外部分软件如WinRAR可以实现对文件的压缩保密保护,就是在形成压缩包的时候添加解压密码,这样生成的压缩包别人没有密码是无法打开的,可以起到一定的文件保密作用。
5. 电脑里的照片如何压缩
具体方法有这些:
方法一
1.如果你的图片格式是PNG格式的,而且对图片质量要求不高,可以使用下面的方法来压缩图片大小。
拓展资料:
压缩文件的基本原理是查找文件内的重复字节,并建立一个相同字节的"词典"文件,并用一个代码表示,比如在文件里有几处有一个相同的词"中华人民共和国"用一个代码表示并写入"词典"文件,这样就可以达到缩小文件的目的。
由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助于理解文件压缩,请在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义"蓝、蓝、蓝……"长长的一串颜色,还不如告诉电脑:"从这个位置开始存储1117个蓝色像点"来得简洁,而且还能大大节约存储空间。
这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以"1"和"0"的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到"数据无损稠密"的效果。
总的来说,压缩可以分为有损和无损压缩两种。如果丢失个别的数据不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式mpeg、音乐文件格式mp3和图像文件格式jpg。但是更多情况下压缩数据必须准确无误,人们便设计出了无损压缩格式,比如常见的zip、rar等。
压缩软件(compression software)自然就是利用压缩原理压缩数据的工具,压缩后所生成的文件称为压缩包(archive),体积只有原来的几分之一甚至更小。当然,压缩包已经是另一种文件格式了,如果想使用其中的数据,首先得用压缩软件把数据还原,这个过程称作解压缩。常见的压缩软件有winzip、winrar等。
6. png图片怎么通过代码实现压缩到指定的文件大小,比如5M压缩到200KB,比如用pngquant或imageMagick
先用命令行形式进行 PNG 压缩。
1,下载 windows安装包 或者 mac 和 linux 版本的安装包。
2,命令行输入 pngquant 就可以使用了;
3,为了使用方便,可以配置环境变量(后面如果和 picom 集成在了一起再去掉 )。
快速使用 pngquant
pngquant 图片名称.png
对于一些可选参数的说明:
1,--skip-if-larger pngquant 有时候压缩的文件会比源文件大。这个选项会判断,如果大就取消执行。强烈建议加上
2,--quality 0-100 图片质量。对于颜色没有特别要求的可以缩减到 10, 但是越小压缩率越低,通常不需要设置。
3,--force 强制执行,pngquant 会判断,如果有一个已经压缩的同名文件在当前文件夹,就不会执行。这个选项会覆盖原来的文件。
4,--output file 指定输入文件的名称。 可以指定为 jpg 格式,但是图片不会变得更小。
5,--speed 执行速度
使用 subprocess 调用 pngquant 命令行
对应的程序:
import subprocess
subprocess.run('pngquant elephant.png')
如果想获取程序运行时屏幕上显示的内容,可以使用 check_output 方法,在这里不需要。
接下来使用 subprocess 封装对应的压缩函数:
def pngquant_compress(fp, force=False, quality=None):
"""压缩函数.
参数:
fp: 文件名称
force: 如果存在同名文件,是否覆盖
quality: 压缩质量。 10-40, or 10
"""
force_command = '-f' if force else ''
quality_command = ''
if quality and isinstance(quality, int):
quality_command = f'--quality {quality}'
if quality and isinstance(quality, str):
quality_command = f'--quality {quality}'
command = f'pngquant {fp} --skip-if-larger {force_command} {quality_command}'
subprocess.run(command)
if __name__ == "__main__":
pngquant_compress('elephant.png
7. python中PLE调整图片大小,等比例压缩文件,怎么写代码
How do I read image data from a URL in Python?
importosimportImagefileName='c:/py/jb51.jpg'fp=open(fileName,'rb')im=Image.open(fp)fp.close()x,y=im.sizeifx <300or y <300:os.remove(fileName)from PIL import Imageimport requestsimport numpy as npfrom StringIO import StringIOresponse = requests.get(url)img = np.array(Image.open(StringIO(response.content)))
from PIL import Imageimport urllib2
im = Image.open(urllib2.urlopen(url))
or if you userequests:
from PIL import Imageimport requests
im = Image.open(requests.get(url, stream=True).raw)
[python] view plain
#coding:utf-8
'''
python图片处理
'''
importImageasimage
#等比例压缩图片
defresizeImg(**args):
args_key={'ori_img':'','dst_img':'','dst_w':'','dst_h':'','save_q':75}
arg={}
forkeyinargs_key:
ifkeyinargs:
arg[key]=args[key]
im=image.open(arg['ori_img'])
ori_w,ori_h=im.size
widthRatio=heightRatio=None
ratio=1
if(ori_wandori_w>arg['dst_w'])or(ori_handori_h>arg['dst_h']):
ifarg['dst_w']andori_w>arg['dst_w']:
widthRatio=float(arg['dst_w'])/ori_w#正确获取小数的方式
ifarg['dst_h']andori_h>arg['dst_h']:
heightRatio=float(arg['dst_h'])/ori_h
ifwidthRatioandheightRatio:
ifwidthRatio<heightRatio:
ratio=widthRatio
else:
ratio=heightRatio
ifwidthRatioandnotheightRatio:
ratio=widthRatio
ifheightRatioandnotwidthRatio:
ratio=heightRatio
newWidth=int(ori_w*ratio)
newHeight=int(ori_h*ratio)
else:
newWidth=ori_w
newHeight=ori_h
im.resize((newWidth,newHeight),image.ANTIALIAS).save(arg['dst_img'],quality=arg['save_q'])
'''
image.ANTIALIAS还有如下值:
NEAREST:usenearestneighbour
BILINEAR:
BICUBIC:
ANTIALIAS:bestdown-sizingfilter
'''
#裁剪压缩图片
defclipResizeImg(**args):
args_key={'ori_img':'','dst_img':'','dst_w':'','dst_h':'','save_q':75}
arg={}
forkeyinargs_key:
ifkeyinargs:
arg[key]=args[key]
im=image.open(arg['ori_img'])
ori_w,ori_h=im.size
dst_scale=float(arg['dst_h'])/arg['dst_w']#目标高宽比
ori_scale=float(ori_h)/ori_w#原高宽比
ifori_scale>=dst_scale:
#过高
width=ori_w
height=int(width*dst_scale)
x=0
y=(ori_h-height)/3
else:
#过宽
height=ori_h
width=int(height*dst_scale)
x=(ori_w-width)/2
y=0
#裁剪
box=(x,y,width+x,height+y)
#这里的参数可以这么认为:从某图的(x,y)坐标开始截,截到(width+x,height+y)坐标
#所包围的图像,crop方法与php中的image方法大为不一样
newIm=im.crop(box)
im=None
#压缩
ratio=float(arg['dst_w'])/width
newWidth=int(width*ratio)
newHeight=int(height*ratio)
newIm.resize((newWidth,newHeight),image.ANTIALIAS).save(arg['dst_img'],quality=arg['save_q'])
#水印(这里仅为图片水印)
defwaterMark(**args):
args_key={'ori_img':'','dst_img':'','mark_img':'','water_opt':''}
arg={}
forkeyinargs_key:
ifkeyinargs:
arg[key]=args[key]
im=image.open(arg['ori_img'])
ori_w,ori_h=im.size
mark_im=image.open(arg['mark_img'])
mark_w,mark_h=mark_im.size
option={'leftup':(0,0),'rightup':(ori_w-mark_w,0),'leftlow':(0,ori_h-mark_h),
'rightlow':(ori_w-mark_w,ori_h-mark_h)
}
im.paste(mark_im,option[arg['water_opt']],mark_im.convert('RGBA'))
im.save(arg['dst_img'])
#Demon
#源图片
ori_img='D:/tt.jpg'
#水印标
mark_img='D:/mark.png'
#水印位置(右下)
water_opt='rightlow'
#目标图片
dst_img='D:/python_2.jpg'
#目标图片大小
dst_w=94
dst_h=94
#保存的图片质量
save_q=35
#裁剪压缩
clipResizeImg(ori_img=ori_img,dst_img=dst_img,dst_w=dst_w,dst_h=dst_h,save_q=save_q)
#等比例压缩
#resizeImg(ori_img=ori_img,dst_img=dst_img,dst_w=dst_w,dst_h=dst_h,save_q=save_q)
#水印
#waterMark(ori_img=ori_img,dst_img=dst_img,mark_img=mark_img,water_opt=water_opt)
[html] view plain
8. PHP等比例压缩图片的实例代码
具体代码如下所示:
/**
*
desription
压缩图片
*
@param
sting
$imgsrc
图片路径
*
@param
string
$imgdst
压缩后保存路径
*/
public
function
compressedImage($imgsrc,
$imgdst)
{
list($width,
$height,
$type)
=
getimagesize($imgsrc);
$new_width
=
$width;//压缩后的图片宽
$new_height
=
$height;//压缩后的图片高
if($width
>=
600){
$per
=
600
/
$width;//计算比例
$new_width
=
$width
*
$per;
$new_height
=
$height
*
$per;
}
switch
($type)
{
case
1:
$giftype
=
check_gifcartoon($imgsrc);
if
($giftype)
{
header('Content-Type:image/gif');
$image_wp
=
imagecreatetruecolor($new_width,
$new_height);
$image
=
imagecreatefromgif($imgsrc);
imageresampled($image_wp,
$image,
0,
0,
0,
0,
$new_width,
$new_height,
$width,
$height);
//90代表的是质量、压缩图片容量大小
imagejpeg($image_wp,
$imgdst,
90);
imagedestroy($image_wp);
imagedestroy($image);
}
break;
case
2:
header('Content-Type:image/jpeg');
$image_wp
=
imagecreatetruecolor($new_width,
$new_height);
$image
=
imagecreatefromjpeg($imgsrc);
imageresampled($image_wp,
$image,
0,
0,
0,
0,
$new_width,
$new_height,
$width,
$height);
//90代表的是质量、压缩图片容量大小
imagejpeg($image_wp,
$imgdst,
90);
imagedestroy($image_wp);
imagedestroy($image);
break;
case
3:
header('Content-Type:image/png');
$image_wp
=
imagecreatetruecolor($new_width,
$new_height);
$image
=
imagecreatefrompng($imgsrc);
imageresampled($image_wp,
$image,
0,
0,
0,
0,
$new_width,
$new_height,
$width,
$height);
//90代表的是质量、压缩图片容量大小
imagejpeg($image_wp,
$imgdst,
90);
imagedestroy($image_wp);
imagedestroy($image);
break;
}
}
总结
以上所述是小编给大家介绍的PHP等比例压缩图片的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:php中10个不同等级压缩优化图片操作示例PHP
实现等比压缩图片尺寸和大小实例代码php
gd等比例缩放压缩图片函数基于PHP实现等比压缩图片大小php上传图片并压缩的实现方法PHP实现图片上传并压缩PHP实现图片压缩的两则实例php使用imagick模块实现图片缩放、裁剪、压缩示例
9. android 图片质量压缩和尺寸压缩有什么区别
这个方法用来将特定格式的压缩图片写入输出流(OutputStream)中,当然例如输出流与文件联系在一起,压缩后的图片也就是一个文件。如果压缩成功则返回true,其中有三个参数:
format是压缩后的图片的格式,可取值:Bitmap.CompressFormat .JPEG、~.PNG、~.WEBP。
quality的取值范围为[0,100],值越小,经过压缩后图片失真越严重,当然图片文件也会越小。(PNG格式的图片会忽略这个值的设定)
stream指定压缩的图片输出的地方,比如某文件。
上述方法还有一个值得注意的地方是:当用BitmapFactory decode文件时可能返回一个跟原图片不同位深的图片,或者丢失了每个像素的透明值(alpha),比如说,JPEG格式的图片仅仅支持不透明的像素。文章android图片压缩在文末提到的下面这点可能就是这个原因:
当调用bitmap.compress(CompressFormat.JPEG, 100, fos);保存为图片时发现图片背景为黑色,如下图:
下面是质量压缩的代码:
(Bitmapbmp,Filefile){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
intoptions=80;//个人喜欢从80开始,
bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);
while(baos.toByteArray().length/1024>100){
baos.reset();
options-=10;
bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);
}
try{
FileOutputStreamfos=newFileOutputStream(file);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
}catch(Exceptione){
e.printStackTrace();
}
}
这段代码来自Android图片压缩总结,我根据自己的需求改了改,但是大同小异,所以就直接贴了。
随着代码中的option逐渐变小,我们可以在logcat中打印baos的大小来查看图片的大小。我们也可以去掉while的循环条件,一直压缩下去看效果,最终一张照片可能就由原来的3、4M变成了几百K甚至几百B了。我在试的过程中将option设置成100,压缩后偶尔会出现一张3、4M的图片经过压缩后竟变成了6、7M,这里还是有点困惑,不知道为什么。
随后,我想把这个压缩后的图片(1、200KB)填充到ImageView中时却失败了,logcat中提示图片过大!这就是文章开头提到的问题,虽然我们通过质量压缩使File形式的图片文件缩小了,但是并没有改变图片的宽高,原先是1080*1920分辨率的图片经压缩后还是1080*1920,而File格式转换成Bitmap格式进入到内存中时,内存是根据图片的像素数量来给图片分配内存大小的,还是有好几M,因此填充ImageView失败。
顺便提一下,可以用bitmap.getByteCount()获取存储bitmap像素的内存大小,但是KITKAT(Android 4.4版本)以后用getAllocateByteCount()获取。一般情况下,后者返回值比前者大,比如,当bitmap被重用去decode另外更小的bitmaps时,或者被人为地配置一下属性值,比如setWidth()、setHeight()、reconfigure()时,如果bitmap不做以上操作,二者的返回值应该是一样的。(译文,不太懂)
二、尺寸压缩
特点: 通过设置采样率, 减少图片的像素, 达到对内存中的Bitmap进行压缩
我们主要通过BitmapFactory中的decodeFile方法对图片进行尺寸压缩:
publicstaticBitmapdecodeFile(StringpathName,BitmapFactory.Optionsopts)
public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)
其中有两个参数:
pathName是图片文件的路径。
opts 就是所谓的采样率,它里边有很多属性可以设置,我们通过设置属性来达到根据自己的需要,压缩出指定的图片。其中比较常用的属性有:
booleaninJustDecodeBounds—— 如果设置为true,则只读取bitmap的宽高,而忽略内容。
intinSampleSize—— 如果>1,调用decodeFile方法后,就会得到一个更小的bitmap对象(已压缩)。比如设置为2,那么新Bitmap的宽高都会是原Bitmap宽高的1/2,总体大小自然就是原来的1/4了,以此类推。
booleaninPurgeable—— 如果设置为true,压缩后的图片像素占的内存将会在系统清理内存的时候被回收掉,当像素的信息再次被用到时将会自动重新decode该像素(比如getPixels()时)。(慎用!重复decode可以会造成UI的卡顿,API level 21 已弃用)
booleaninInputShareable—— 与inPurgeable配合使用,如果inPurgeable设置成false,自动忽略此值,如果inPurgeable为true,此值决定是否该bitmap能分享引用给输入数据(inputstream,array等),或者必须进行深拷贝。API level 21 已弃用。(这是译文,不太理解!!!)
下面是一段实现的代码
privateBitmapsizeCompres(Stringpath,intrqsW,intrqsH){
//用option设置返回的bitmap对象的一些属性参数
finalBitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inJustDecodeBounds=true;//设置仅读取Bitmap的宽高而不读取内容
BitmapFactory.decodeFile(path,options);//获取到图片的宽高,放在option里边
finalintheight=options.outHeight;//图片的高度放在option里的outHeight属性中
finalintwidth=options.outWidth;
intinSampleSize=1;
if(rqsW==0||rqsH==0){
options.inSampleSize=1;
}elseif(height>rqsH||width>rqsW){
finalintheightRatio=Math.round((float)height/(float)rqsH);
finalintwidthRatio=Math.round((float)width/(float)rqsW);
inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;
options.inSampleSize=inSampleSize;
}
returnBitmapFactory.decodeFile(path,options);//主要通过option里的inSampleSize对原图片进行按比例压缩
}
private Bitmap sizeCompres(String path, int rqsW, int rqsH) {
// 用option设置返回的bitmap对象的一些属性参数
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;// 设置仅读取Bitmap的宽高而不读取内容
BitmapFactory.decodeFile(path, options);// 获取到图片的宽高,放在option里边
final int height = options.outHeight;//图片的高度放在option里的outHeight属性中
final int width = options.outWidth;
int inSampleSize = 1;
if (rqsW == 0 || rqsH == 0) {
options.inSampleSize = 1;
} else if (height > rqsH || width > rqsW) {
final int heightRatio = Math.round((float) height / (float) rqsH);
final int widthRatio = Math.round((float) width / (float) rqsW);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
options.inSampleSize = inSampleSize;
}
return BitmapFactory.decodeFile(path, options);// 主要通过option里的inSampleSize对原图片进行按比例压缩
}
上面就是简单的质量压缩与尺寸压缩。