PHP图片缩放,裁剪和压缩

Google PageSpeed Insights可以对网页加载速度评分,并给出优化建议

简单来说,优化图片即使用合适尺寸的图片(缩放,裁剪),压缩图片

这里只介绍jpng和png两种图片格式

软件准备:

imagemagick

apt-get install imagemagick
 

jpegtran

apt-get install libjpeg-turbo-progs
 

optipng

apt-get install optipng

pngquant

apt-get install pngquant

php5-gd

apt-get install php5-gd

0.格式转换

一般来说,jpg图片比png图片小得多,如无特殊需求(如透明)使用jpg图片可大大减小图片大小

格式转换可使用convert命令

shell_exec(‘convert a.png a.jpg‘);

图片从7百k变成了1百k

1.图片缩放

图片缩放可使用convert命令

$in = ‘a.png‘;
$out = ‘a-convert-resize-100.png‘;
//$out = ‘a.png‘;   replace the input infile

//escapeshellarg可处理文件名中的特殊字符如空格
shell_exec(‘convert -resize 100 ‘ . escapeshellarg($in) . ‘ ‘ . escapeshellarg($out));

图片从1850*983缩小到100*53(宽高比例不变)

2.图片裁剪

图片裁剪可使用php的imagecopy()或imagecrop()函数实现

$in = ‘a.png‘;
$out = ‘a-copy.png‘;

//裁剪宽度
$width = 100;
//裁剪高度
$height = 80;
//原图的开始的x轴坐标
$x = 1;
//原图开始的y轴坐标
$y = 2;

$inImage = imagecreatefrompng($in);
//$inImage = imagecreatefromjpeg($in);
$outImage = imagecreatetruecolor($width, $height);
imagecopy($outImage, $inImage, 0, 0, $x, $y, $width, $height);
imagepng($outImage, $out);
//imagejpeg($outImage, $out);
imagedestroy($inImage);
imagedestroy($outImage);

3.图片压缩

jpg图片可使用convert有损压缩和jpegtran无损压缩

convert –quality可将图片按指定质量压缩,但有时可能会越压越大

jpegtran –progressive可将图片压缩为progressive图片,就是加载时先模糊后清晰的那种图,而不是从上到下显示

$in = ‘b.jpg‘;
$out = ‘b-convert-quality-60.jpg‘;
$out2 = ‘b-jpegtran-progressive.jpg‘;

$in = escapeshellarg($in);
$out = escapeshellarg($out);
$out2 = escapeshellarg($out2);

shell_exec(‘convert -quality 60 ‘ . $in . ‘ ‘ . $out);
shell_exec(‘jpegtran -copy none -optimize -progressive -outfile ‘ . $out2 . ‘ ‘ . $out);

png图片可使用pngquant有损压缩和optipng无损压缩

pngquant可将png32或png24图片压缩为png8图,仍保留了透明

pngquat –quality 设置过大经常会使图片越压越大,所以要小心设置,或不设置

$in = ‘a.png‘;
$out = ‘a-pngquant.png‘;
$out2 = ‘a-pngquant-optipnt.png‘;

$in = escapeshellarg($in);
$out = escapeshellarg($out);
$out2 = escapeshellarg($out2);

shell_exec(‘pngquant --speed 1 -o ‘ . $out . ‘ ‘ . $in);
//replace file
//shell_exec(‘pngquant --speed 1 -f --ext .png ‘ . $in);

shell_exec(‘optipng -strip all -quiet -clobber -o3 -i0 ‘ . $out . ‘ -out ‘ . $out2);
 

4.先缩放还是先压缩

好像先缩放后压缩会更小(不一定准确,我只测了几张图,并且清晰度比较不了我的屏幕太模糊。。。)

下图为a.png(1850*980)的测试数据

下图为b.jpg(1920*1080)的测试数据

参考资料

Google优化图片建议 https://developers.google.com/speed/docs/insights/OptimizeImages

携程博客 http://ued.ctrip.com/blog/image-optimization-tools.html

imagemagic http://www.imagemagick.org/script/command-line-processing.php

jpegtran http://jpegclub.org/jpegtran/

optipng

pngquant

时间: 2024-12-21 20:03:38

PHP图片缩放,裁剪和压缩的相关文章

Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理

前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量.还支持对一个目录的所有图片进行批量处理操作,下边就和大家分享一下java中用Thumbnailator做图片各种处理的方法(相关jar包可在最

java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了

原文:java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了 源代码下载地址:http://www.zuidaima.com/share/1550463380458496.htm 纯 java 实现的 图片缩放 压缩 裁剪工具!不依赖任何第三方 jar 包 1. 找了很久,市面上再也找不到比它缩放效果还好的代码了 (再不使用任何第三方组件的前提下) 2. 支持缩放 3. 支持剪切 (例如:用户上传头像后剪切成正方形小图) /* * Copyright 2012

使用PhoneGap裁剪和压缩图片并上传(安卓版)

安装phonegap的camera插件后,可以对从图片库选择图片进行裁剪或压缩操作,但插件本身有些问题,经过改进,现在可以顺利完成上述功能. 安装方法 1 首先使用命令行安装camera插件: phonegap plugin add org.apache.cordova.camera 2 安装成功后,下载下面的CameraLauncher.java文件,将插件包中的同名文件替换掉: http://phonegap.jiusem.net/camera/src/android/CameraLaunc

Android图片缩放,压缩总结(inSampleSize,Matrix比较)

Android中经常会遇到需要对图片进行缩放及压缩的操作,下面列出3种图片缩放方法: 一.图片缩放 1.inSampleSize(采样率) 优点:效率较高,解析速度快 缺点:采样率inSampleSize的取值只能是2的次方数(例如:inSampleSize=15,实际取值为8;inSampleSize=17,实际取值为16;实际取值会往2的次方结算),因此该方法不能精确的指定图片的大小 2.Matrix 优点:可以精确地指定图片的缩放大小 缺点:是在原bitmap的基础之上生成的,占内存,效率

Android笔记之 图片自由裁剪

前言--项目中需要用到对用户头像的裁剪和上传功能.关于裁剪,一开始是想自己来做,但是觉得这个东西应该谷歌有开发吧,于是一搜索官方文档,果然有.于是,就果断无耻地用了Android自带有关于照片的自由裁剪.因为时间太紧,虽然不太华丽,但是胜在能用,节省时间嘛. 具体是通过 Intent的action来实现的. 关键代码如下: public void imageCut(Uri uri) { Intent intent = new Intent("com.android.camera.action.C

Android调用相机实现拍照并裁剪图片,调用手机中的相冊图片并裁剪图片

在 Android应用中,非常多时候我们须要实现上传图片,或者直接调用手机上的拍照功能拍照处理然后直接显示并上传功能,以下将讲述调用相机拍照处理图片然后显示和调用手机相冊中的图片处理然后显示的功能,要想实现上传功能.一般都是上传到数据库中,将imageView中的图片取出来然后存到数据库中就可以. 以下讲述实现的步骤: 1. 调用相冊中的图片裁剪然后显示. 1.1 使用Intent获取从相冊中选择的照片. 1.2 对获取的图片进行裁剪处理.裁剪处理也是使用Intent调用的Android自带的裁

canvas图像裁剪、压缩、旋转

转载于:http://www.cnblogs.com/dailc/p/7843204.html 前言 前段时间遇到了一个移动端对图像进行裁剪.压缩.旋转的需求.考虑到已有各轮子的契合度都不高,于是自己重新造了一个轮子. 关于图像裁剪.压缩 在HTML5时代,canvas的功能已经非常强大了,可以进行像素级的操作.像图像裁剪.压缩就都是基于canvas来实现的. 关于其中原理,无非就是利用canvas自带的API,复杂一点的就是裁剪框以及旋转后的坐标计算,因此不再赘述. 本文中的图像裁剪.压缩都是

java图片缩放

package com.rubekid.springmvc.utils; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.F

android多点触控自由对图片缩放

在系统的相册中,观看相片就可以用多个手指进行缩放. 要实现这个功能,只需要这几步: 1.新建项目,在项目中新建一个ZoomImage.java public class ZoomImageView extends View { //初始化状态常量 public static final int STATUS_INIT=1; //图片放大状态常量 public static final int STATUS_ZOOM_OUT=2; //图片缩小状态常量 public static final in