php 图像裁剪(自定义裁剪图片大小)_php剪裁图片-程序员宅基地

技术标签: 笔记  前端  thinkphp5开发教程  javascript  大数据  

剪裁代码

<?php
/**
* 图像裁剪
* @param $title string 原图路径
* @param $content string 需要裁剪的宽
* @param $encode string 需要裁剪的高
*/
function imagecropper($source_path, $target_width, $target_height)
{
    
$source_info = getimagesize($source_path);
$source_width = $source_info[0];
$source_height = $source_info[1];
$source_mime = $source_info['mime'];
$source_ratio = $source_height / $source_width;
$target_ratio = $target_height / $target_width;

// 源图过高
if ($source_ratio > $target_ratio)
{
    
$cropped_width = $source_width;
$cropped_height = $source_width * $target_ratio;
$source_x = 0;
$source_y = ($source_height - $cropped_height) / 2;
}
// 源图过宽
elseif ($source_ratio < $target_ratio)
{
    
$cropped_width = $source_height / $target_ratio;
$cropped_height = $source_height;
$source_x = ($source_width - $cropped_width) / 2;
$source_y = 0;
}
// 源图适中
else
{
    
$cropped_width = $source_width;
$cropped_height = $source_height;
$source_x = 0;
$source_y = 0;
}

switch ($source_mime)
{
    
case 'image/gif':
$source_image = imagecreatefromgif($source_path);
break;

case 'image/jpeg':
$source_image = imagecreatefromjpeg($source_path);
break;

case 'image/png':
$source_image = imagecreatefrompng($source_path);
break;

default:
return false;
break;
}

$target_image = imagecreatetruecolor($target_width, $target_height);
$cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);

// 裁剪
imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
// 缩放
imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);

//保存图片到本地(两者选一)
$randNumber = mt_rand(00000, 99999). mt_rand(000, 999);
$fileName = substr(md5($randNumber), 8, 16) .".png";
$new=imagepng($target_image,'../'.$fileName);
imagedestroy($target_image);
echo $fileName;

//直接在浏览器输出图片(两者选一)
// header('Content-Type: image/jpeg');
// imagepng($target_image);
// imagedestroy($target_image);
// imagejpeg($target_image);
// imagedestroy($source_image);
// imagedestroy($target_image);
// imagedestroy($cropped_image);
}

//调用
//imagecropper('./img033.jpg',300,300);
imagecropper('https://profile.csdnimg.cn/9/B/A/0_qq_35230125',140,140);
//imagecropper('./img033.jpg',55,55);
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35230125/article/details/125748575

智能推荐

stm32f103x8最小系统板原理图pcb_stm32f103x8最小系统原理图-程序员宅基地

文章浏览阅读417次。原理图如下 刚开始学习画pcb的四层板子,做了一个stm32f103x8的系统板。封装基本手绘,比较粗糙。_stm32f103x8最小系统原理图

linux 物理内存管理之伙伴系统_伙伴系统 物理内存分配-程序员宅基地

文章浏览阅读218次。linux使用伙伴系统来管理物理内存页一、伙伴系统原理1. 伙伴关系顾名思义一下,在操作系统分配内存的过程中,一个内存块常常被分成两个大小相等的内存块,这两个大小相等的内存块就是伙伴关系,他满足三个条件两个块具有相同大小,记为2^K,物理地址连续从同一个大块中拆分出来2. 伙伴算法的实现原理为了便于页面维护,将多个页面组成内存块,每个内存块都有2的方幂个页,方幂的指数被称为阶order,order相同的内存块被组织到一个空闲链表中,伙伴系统基于2的方幂来申请释放内存页。当申请内存页时,伙_伙伴系统 物理内存分配

如何制作竖线的效果_前端给盒子前面加竖杠-程序员宅基地

文章浏览阅读751次。描述在很多网页中, 都会有一个小竖线的效果 (如图) . 实现这个小竖线的效果有很多种方法. 在这里记录一下.方法1. 通过::after在元素后面追加一个宽度为1px的元素.search-box .search span::after { position: absolute; right: -8px; content: ""; width: 1px; height: 15px; background-color: #ccc;}2. 设置右_前端给盒子前面加竖杠

Qt报错解决方法_qt setting a new default format with a different v-程序员宅基地

文章浏览阅读745次。Qt报错:error: no matching function for call to 'MainWindow::connect(QAction*&, void (QAction::*)(bool),MainWindow::MainWindow(QWidget*)::__lambda0)' }); ^报错原因:Qt软件版本过低,低于Qt5.4。解决方案:在.pro文件中加入代码:如下:CONFIG += C++11..._qt setting a new default format with a different version or profile afte

2020年数学建模国赛C题:中小微企业的信贷决策_(1) 对附件1中123家企业的信贷风险进行量化分析,给出该银行在年度信贷总额固定时-程序员宅基地

文章浏览阅读2.8w次,点赞9次,收藏15次。2020年高教社杯全国大学生数学建模竞赛题目(请先阅读“全国大学生数学建模竞赛论文格式规范”)C题 中小微企业的信贷决策在实际中,由于中小微企业规模相对较小,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高、信贷风险小的企业给予利率优惠。银行首先根据中小微企业的实力、信誉对其信贷风险做出评估,然后依据信贷风险等因素来确定是否放贷及贷款额度、利率和期限等信贷策略。某银行对确定要放贷企业的贷款额..._(1) 对附件1中123家企业的信贷风险进行量化分析,给出该银行在年度信贷总额固定时

Matlab中fminunc函数的意义 以及options函数的初级用法。_fmincon 和options-程序员宅基地

文章浏览阅读7.1w次,点赞37次,收藏122次。本文问题出自Stanford大学 Andrew Ng老师的机器学习week 3 Logistic Regression Model 中出现如下高级函数:该过程涉及matlab两个函数 fminunc 和options;要清楚的了解这两个算法如何使用,我们需要知道自定义函数的使用方法,以图上的自定义函数function [jVal,gradient] = costFunction(t_fmincon 和options

随便推点

黑马程序员—C语言关键字、标识符、注释_c语言程序特殊标识符-程序员宅基地

文章浏览阅读285次。一、关键字C语言提供的有特殊含义的符号,共32个,这些关键字都赋予了特殊的含义。简而言之,关键字就是C语言提供的特殊含义的符合。二、标识符标识符是程序员在程序中自定义的一些符号和名称。关键字是系统自带的,标识符是自定义的。如函数的名称等,用来区分各种事务。标识符有一定的命名规则:1 只能由26个小写字母,0-9的数字以及下划线组成。2 严格区分大小写。3 不能以数字_c语言程序特殊标识符

ArcGIS Server10.4安装教程_arcgis server10.4.1 ecp-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏13次。准备内容安装环境:win10*64位专业版安装文件:ArcGIS_Server_Ent_Windows_1041_150998.iso破解文件:Lic10.4.1.ecp#安装Server前,请保证已有Desktop环境,并关闭防火墙,保证6080端口畅通。#请都以管理员身份运行安装程序安装步骤1、 右键以管理员身份运行:ArcGIS_for_Server_Windows..._arcgis server10.4.1 ecp

本地开发、调试vue npm包_npm vue调试-程序员宅基地

文章浏览阅读2.3k次。1、首先创建目录使用使用webpack-simple创建目录结构​​​​入口文件名为index.jspackage.json 里面添加"main": "./src/index.js",index.js里面写:import Login from './Login.vue'Login.install = function(Vue){ Vue.component(Login.na..._npm vue调试

Error dialog box generic entry point_unable to find an entry point named 'pal_localallo-程序员宅基地

文章浏览阅读211次。要获取更多Jerry的原创文章,请关注公众号"汪子熙":_unable to find an entry point named 'pal_localalloc' in dll 'dbnetlib.dll'.

CSS入门知识汇总-程序员宅基地

文章浏览阅读77次。1.CSS认识在谈论CSS的概念之前,我们先说一说web标准的目的——其在于创建一个统一的用于web表现层的技术标准,以便通过不同浏览器或终端设备向最终用户展示信息内容。一个网页的呈现是由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。而三大部分又是由html、css、js来编写组成的:结构HTML...

sqlSessionFactory异常_sqlsessionfactory报错-程序员宅基地

文章浏览阅读881次。org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘sqlSessionFactory’ defined in class path resource [spring/applicationContext.xml]: Invocation of init method fai..._sqlsessionfactory报错

推荐文章

热门文章

相关标签