遇到这样一个需求:原图大小不一,而且留白也大小不一,需要将原图切出来一个核心图,然后将图片左右留白,组成一个其他尺寸的图片。换句话说,原图在新图片中的位置是可以控制的。

这里思路是:先创建一个规定大小的底图,然后将原图经过缩放后,放到底图中,也就是图片叠加。

####这里实现的是第二个箭头所示的效果。

(完成第一个箭头效果请移步http://www.cnblogs.com/haodaquan/p/6381636.html)

下面的代码可供参考:

<?php
/************************************************************
** @Description:  图片叠加demo
** @Author: haodaquan
** @Date:   2016-11-30 12:07:51
** @Last Modified by:   haodaquan
** @Last Modified time: 2017-02-09 13:59:51
*************************************************************/
header('content-type:image/jpeg');#图片显示 $bg_width = $bg_height = 600; #创建真彩色画布并填补灰色
$final_srouce       = imagecreatetruecolor($bg_width,$bg_height);
$background_color = imagecolorAllocate($final_srouce,255,255,255);#白色底色
imagefill($final_srouce,0,0,$background_color); 
#获取覆盖图片 大小为121*75
$source           = '/Users/haodaquan/Sites/PyWeb/CoreImage/newImage/new_image.jpg';
$img_source          = imagecreatefromjpeg($source);
$info             = getimagesize($source);
######################
#1、直接覆盖图片加到画布上 
#前两个数字为画布起始xy坐标,中间两个数字为覆盖图片的起始xy坐标,最后两个数字表示覆盖图片的xy长度
#imagecopy($final_srouce,$img_source,30,50,0,0,121,75); #新图宽度留白,高度留白
$blank_width  = 30;
$blank_height = 50; #假设宽度优先填满新图,宽度大于高度的图
#计算缩放比率
$new_width  = $bg_width-2*$blank_width;
$new_height = $info[1]*($new_width/$info[0]); #2、带缩放的叠加 详见底部函数注释
imagecopyresampled($final_srouce,$img_source,$blank_width,$blank_height,0,0,$new_width,$new_height,$info[0],$info[1]);
###################### imagejpeg($final_srouce, './tmp/final_srouce.jpeg',100);#生成图片 第三个参数为质量[1-100]
imagejpeg($final_srouce); #页面显示图片 #销毁资源
imagedestroy($final_srouce);
imagedestroy($img_source); // bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
// $dst_image:新建的图片
// $src_image:需要载入的图片
// $dst_x:设定需要载入的图片在新图中的x坐标
// $dst_y:设定需要载入的图片在新图中的y坐标
// $src_x:设定载入图片要载入的区域x坐标
// $src_y:设定载入图片要载入的区域y坐标
// $dst_w:设定载入的原图的宽度(在此设置缩放)
// $dst_h:设定载入的原图的高度(在此设置缩放)
// $src_w:原图要载入的宽度
// $src_h:原图要载入的高度

php 图片指定留白叠加缩放的更多相关文章

  1. C#图片处理示例(裁剪,缩放,清晰度,水印)

    C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...

  2. object-fit 解决图片指定大小被压缩问题

    object-fit 解决图片指定大小被压缩问题 第一次遇到这个属性,是在给video 写 poster的时候,选取的作为poster的img的尺寸有点小,导致video播放器两边有留白.在控制台查看 ...

  3. java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)

    最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...

  4. 超大图片显示,可任意缩放,移动,不用DiskLruCache

    1.演示,代码 下载示例apk      下载项目 :  https://gitee.com/xi/LImage.git 2.遇到的问题 想省内存,不太可能 只支持拖拽手势,不支持缩放相对简单,解码v ...

  5. js实现图片的等比例缩放

      js实现图片的等比例缩放 CreateTime--2018年3月6日14:04:18 Author:Marydon 1.代码展示 /** * 图片按宽高比例进行自动缩放 * @param ImgO ...

  6. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

  7. 实现图片的2次缩放后再进行candy边缘检测

    //实现图片的2次缩放后再进行candy边缘检测//Author:SD//Date:2015-9-27#include "cv.h"#include "highgui.h ...

  8. C#开发自动照片(图片)裁剪(缩放)工具

    1.需求分析 用winform窗体程序,开发一个能够自动.批量对图片进行缩放和裁剪的程序. 原本想直接从网上找类型的工具直接用,但是无奈现在网上能找到的工具,要么不能用,要么就是很 恶心的下载完后还有 ...

  9. 使用canvas实现图片预览、缩放(压缩)以及生成文件下载

    参考 https://www.runoob.com/html/html5-canvas.html https://www.cnblogs.com/yuanzhiguo/p/8288822.html h ...

随机推荐

  1. [git]将代码上传到github

    1.右键你的项目,如果你之前安装git成功的话,右键会出现两个新选项,分别为Git Gui Here,Git Bash Here,这里我们选择Git Bash Here,进入如下界面 2.接下来输入如 ...

  2. Data Compression Category

    Data Compression is an approach to compress the origin dataset and save spaces. According to the Eco ...

  3. Kubernetes3-kubectl管理Kubernetes容器平台-1

    一.简介 1.什么是kubectl kubectl前面其实已经用到了一些,它其实就是用于操作kubernetes集群的命令行接口,通过kubectl的各种命令实现各种功能 2.环境还是用上一偏文章 K ...

  4. SysTick系统定时器

    1.SysTick定时器介绍 SysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个 外设,被嵌入在 NVIC 中.它是一个24 位向下递减的定时器,每计数一 次所需时间为 ...

  5. C++中对C的扩展学习新增语法——强枚举

    枚举类型 C++中对枚举的加强: 1.C++不允许非枚举值赋值给枚举类型,不允许其他枚举类型的值赋值给当前枚举类型,而C语言中是允许的. 2.枚举值具有外层作用域,容易造成名字冲突. 3.不同类型的枚 ...

  6. PHP 面试官问:你说说Redis的几个过期策略?

    在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期.当设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的. 设置过期时间 expire ke ...

  7. 导入maven项目pom报错

    打开window->preferences->maven->user settings更换settings.xml即可

  8. Ubuntu字符界面与图形界面的切换

    1.按ALT+CTRL+F1切换到字符界面 2.按ALT+CTRL+F7切换到图形界面

  9. linux日常笔记(1)

    1.SELlinux SELinux是 美国国家安全局 (NSA) 对于 强制访问控制的实现 =>可以使root受限的权限 关闭SELinux=>修改配置文件,永久生效; sed -i ' ...

  10. hdu 2255 奔小康赚大钱 (KM)

    奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...