laravel如何实现图片上传、裁剪和生成缩略图_Laravel图片上传裁剪与缩略图生成教程

安装Intervention Image扩展包并配置服务提供者和门面;2. 创建图片上传表单与路由,使用控制器处理文件上传并验证格式大小;3. 在控制器中通过generateThumbnails方法利用Intervention Image生成缩略图与裁剪图;4. 建议使用Laravel Storage系统管理文件路径,重命名上传文件并限制类型大小以增强安全性。

laravel如何实现图片上传、裁剪和生成缩略图_laravel图片上传裁剪与缩略图生成教程

在 Laravel 中实现图片上传、裁剪和生成缩略图,是开发中常见的需求,比如用户头像上传、商品图片处理等。整个流程包括文件上传验证、保存原图、使用图像处理库进行裁剪与缩略图生成。下面是一个完整且实用的实现方案。

1. 安装图像处理扩展包 Intervention Image

Intervention Image 是 Laravel 社区广泛使用的图像处理库,支持 GD 和 Imagick 驱动,可以轻松实现图片裁剪、缩放、水印等功能。

在项目根目录执行以下命令安装:

composer require intervention/image

如果你使用的是 Laravel 5.5+,服务提供者和门面会自动注册。否则需要手动添加:

config/app.php 的 providers 数组中添加: InterventionImageImageServiceProvider::class, 在 aliases 数组中添加门面: ‘Image’ => InterventionImageFacadesImage::class,

2. 创建图片上传表单和控制器

创建一个简单的表单用于上传图片:

  @csrf    

routes/web.php 中添加路由:

Route::post(‘/upload’, [ImageController::class, ‘upload’]);

创建控制器:

php artisan make:controller ImageController

在控制器中编写上传逻辑:

use IlluminateHttpRequest;use InterventionImageFacadesImage;public function upload(Request $request){    $request->validate([        'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',    ]);    if ($request->hasFile('image')) {        $image = $request->file('image');        $filename = time() . '_' . uniqid() . '.' . $image->getClientOriginalExtension();        $path = public_path('uploads/original/');        // 移动原始文件        $image->move($path, $filename);        // 生成缩略图和裁剪        $this->generateThumbnails($filename);        return back()->with('success', '图片上传并处理成功!');    }    return back()->with('error', '上传失败');}

3. 图片裁剪与生成缩略图

在控制器中添加 generateThumbnails 方法,使用 Intervention Image 处理图片:

private function generateThumbnails($filename){    $path = public_path('uploads/original/' . $filename);    $thumbPath = public_path('uploads/thumb/');    $cropPath = public_path('uploads/cropped/');    // 确保目录存在    if (!is_dir($thumbPath)) mkdir($thumbPath, 0755, true);    if (!is_dir($cropPath)) mkdir($cropPath, 0755, true);    $img = Image::make($path);    // 生成缩略图(等比缩放至宽度200)    $img->resize(200, null, function ($constraint) {        $constraint->aspectRatio();    });    $img->save($thumbPath . 'thumb_' . $filename);    // 裁剪为正方形(居中裁剪 300x300)    $img->fit(300, 300);    $img->save($cropPath . 'crop_' . $filename);}

4. 文件存储路径与安全建议

上面示例将图片保存在 public/uploads 目录下,便于直接访问。你也可以使用 Laravel 的 Storage 系统将文件存入 storage/app/public 并创建软链接:

php artisan storage:link

然后使用 Storage 类保存文件:

$path = $request->file('image')->store('original', 'public');

读取时用 Storage::path($path) 获取真实路径再交由 Intervention 处理。

此外注意:

限制上传类型和大小,防止恶意文件 对用户上传的图片重命名,避免覆盖或路径穿越 生产环境建议使用 CDN 或对象存储(如 OSS、S3)基本上就这些。Laravel 配合 Intervention Image 可以非常方便地完成图片上传、裁剪和缩略图生成,代码清晰,扩展性强。

以上就是laravel如何实现图片上传、裁剪和生成缩略图_Laravel图片上传裁剪与缩略图生成教程的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/6781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2026年9月7日 09:27:49
html转txt工具_html转txt网页版转换器
下一篇 2025年12月23日 09:21:00

相关推荐

  • 任务7

    任务7:继承、super关键字和方法重写 目标:学习Java中的继承、super关键字和方法重写。 步骤: 创建Grandma类: 创建一个名为Grandma的类,包含以下字段和方法: 字段:String name = “stella”;, int age = 80;方法:public void w…

    2026年9月7日
    200
  • 写Java的Skiplist

    import java.util.ArrayList;public class SkipList { // Node of the SkipList public static class SkipListNode<K extends Comparable, V> { public K …

    用户投稿 2026年9月7日
    000
  • 最懂医疗的国产推理大模型,果然来自百川智能

    最懂医疗的国产推理大模型,果然来自百川智能最懂医疗的国产推理大模型,果然来自百川智能最懂医疗的国产推理大模型,果然来自百川智能最懂医疗的国产推理大模型,果然来自百川智能

    年末将至,全球ai大模型竞争骤然白热化。本周,kimi模型开启强化学习新范式,deepseek r1以开源姿态“接棒”openai,谷歌则将gemini 2.0 flash thinking的上下文长度扩展至百万级。种种迹象表明,各大玩家正试图在近期决出胜负。 1月24日,百川智能重磅发布国内首个全…

    2026年9月7日 用户投稿
    000
  • 列表(最多用于兰布斯)

    <img src="https://img.php.cn/upload/article/001/246/273/173784975329446.jpg" alt="列表(最多用于兰布斯)”> Java 列表与 Lambda 表达式:高效处理有序集…

    用户投稿 2026年9月7日
    000
  • 英雄没有闪秘法师毕业流派全解析:T0火系暴力输出VS霜冻结界控场王

    还在纠结秘法师的技能搭配?这篇文章将揭秘两大顶级流派的核心秘密!无论是追求“一击致命”的爆发型选手,还是擅长“冰封全场”的策略高手,这份全方位流派指南都能助你成为元素操控大师! 流派选择风向标:先看战力巅峰表现!当前版本秘法师两大流派对比: 火系燃烧流:版本顶尖输出,速刷/冲榜必备 霜冻控制流:高难…

    2026年9月7日
    000
  • 知网官网AIGC检测 免费查重入口链接

    知网不提供免费AIGC检测或查重服务,均按字符数收费。AIGC检测2元/千字符,论文查重1.5元/千字符,通过https://cx.cnki.net上传文档,单次上限10万字,报告分简洁版和全文版,后者高亮标注疑似AI段落。用户可经学校获取免费权限,个人使用需付费,报告48小时内下载有效,结果仅供参…

    2026年9月7日
    000
  • Clojure、Kotlin 和 Scala 之间的区别

    概述 Java虚拟机(JVM)生态系统拥有多种强大的编程语言,每种语言都具备独特的特性和编程范式。Clojure、Kotlin 和 Scala 是 JVM 开发者常用的三种语言,本文将重点比较它们与 JVM 和 JDK 的集成情况。 Clojure Clojure 是一种受 Lisp 启发的动态函数…

    2026年9月7日
    200
  • AI赋能剪纸艺术,剪映助力多地文旅点亮新春

    AI赋能剪纸艺术,剪映助力多地文旅点亮新春AI赋能剪纸艺术,剪映助力多地文旅点亮新春AI赋能剪纸艺术,剪映助力多地文旅点亮新春AI赋能剪纸艺术,剪映助力多地文旅点亮新春

    近日,一场别开生面的文化盛宴在社交媒体拉开帷幕。多地文旅纷纷在官方账号发布剪纸风格的视频,以独特的视角展现当地丰富的文旅资源,将传统非遗文化与春节的喜庆氛围完美融合,这一创新形式收获网友大量点赞。 在这些令人眼前一亮的视频中,各地的标志性景点和特色风土人情以剪纸艺术的形式生动呈现。细腻的线条勾勒出西…

    2026年9月7日 用户投稿
    100
  • 最小化Java中的可变范围:安全有效代码的最佳实践

    本文探讨了缩小Java变量作用域以提升代码可读性、可维护性和安全性至关重要的问题。文章将Java的面向对象方法与C等语言进行了对比,并通过方法封装和受控访问等最佳实践示例,阐述了如何有效地限制变量的作用域。 在Java中,变量的作用域是指程序中可以访问该变量的区域(Mahrsee, 2024)。作用…

    2026年9月7日
    000
  • Meta陷入恐慌?内部爆料:在疯狂分析复制DeepSeek,高预算难以解释

    Meta陷入恐慌?内部爆料:在疯狂分析复制DeepSeek,高预算难以解释Meta陷入恐慌?内部爆料:在疯狂分析复制DeepSeek,高预算难以解释Meta陷入恐慌?内部爆料:在疯狂分析复制DeepSeek,高预算难以解释Meta陷入恐慌?内部爆料:在疯狂分析复制DeepSeek,高预算难以解释

    deepseek开源大模型的横空出世,引发美国ai巨头恐慌,meta首当其冲。 近期,Meta员工在Teamblind匿名论坛爆料,DeepSeek一系列低成本高性能的模型发布,让Meta生成式AI团队面临巨大压力,其高昂预算的合理性受到质疑。 爆料帖原文指出,DeepSeek-V3在基准测试中超越…

    2026年9月7日 用户投稿
    000
  • 高德地图App如何下载离线地图 高德地图App离线导航数据的节省流量攻略

    首先下载离线地图可解决无网络时的导航需求,1. 打开高德地图App,进入“我的”-“离线地图”-“城市列表”,选择城市并下载地图与导航数据;2. 存储不足时可通过电脑访问官网下载zip格式地图包,用iTunes文件共享功能导入高德地图App;3. 为节省流量,可在导航设置中开启“离线优先”模式,强制…

    2026年9月7日
    000
  • 如何解决表格数据渲染中多个接口调用导致数据覆盖的问题?

    高效解决表格数据渲染中接口调用冲突 在表格渲染过程中,如果需要从多个接口获取数据填充不同字段,常常会遇到后一个接口返回的数据覆盖前一个接口数据的难题。本文提供一种有效的解决方案,避免数据覆盖,确保数据完整性。 问题分析及解决方案 当分别调用两个接口获取表格不同字段数据时,如果直接用后一个接口的数据覆…

    2026年9月7日
    000
  • 阿里云通义大模型新技术:MoE模型训练专家平衡的关键细节

    阿里云通义大模型新技术:MoE模型训练专家平衡的关键细节阿里云通义大模型新技术:MoE模型训练专家平衡的关键细节阿里云通义大模型新技术:MoE模型训练专家平衡的关键细节阿里云通义大模型新技术:MoE模型训练专家平衡的关键细节

    阿里云通义千问团队在最新论文中揭示了混合专家模型(moe)训练中的一个关键问题,并提出了一种创新的解决方案。该问题在于现有moe训练框架普遍采用局部负载均衡损失(lbl),导致专家激活不均衡,限制了模型性能和专家特异性。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Deep…

    2026年9月7日 用户投稿
    000
  • 什么是DLL劫持

    windows操作系统在其基础架构中定义了dll的搜索路径(加载dll文件时需要遵循的目录查找顺序)。如果您能够识别出没有指定绝对路径的可执行文件请求的dll(从而触发此搜索过程),您就可以将包含恶意代码的dll放置在搜索路径的优先位置。这样,windows会在加载官方版本之前找到您的dll,并毫不…

    2026年9月7日
    000
  • Vue中如何使用ant-design-vue的Tabs组件实现滚动吸顶效果?

    使用 ant-design-vue 的 tabs 组件实现滚动条滚到 tabs 位置 在 vue 页面中使用 ant-design-vue 的 tabs 组件时,可以实现滚动条滚动到 tabs 位置时吸顶,而向上滚动时也能正常显示 tabs 上面的内容。 思路: 获取 tabs 距离顶部的距离。监听…

    用户投稿 2026年9月7日
    000
  • Java、Taint 和 SAST:它是什么以及我们为什么需要它?

    java web 应用安全:静态应用程序安全测试 (sast) 和污点分析 大量使用 Java 编写服务器端代码的 Web 应用,必须具备抵御安全漏洞的能力。本文简要介绍一种对抗方法:静态应用程序安全测试 (SAST),并探讨污点分析在此中的作用。 SAST 和潜在漏洞 PVS-Studio Jav…

    2026年9月7日
    000
  • 如何在 JavaFX 上制作缩略图?

    本文将演示如何在 JavaFX 桌面应用程序中创建点击式放大图片的缩略图效果,类似于网页中的缩略图功能。 我们将使用 fxpopup 库实现弹出式放大效果。 请确保已在项目中添加 fxpopup 依赖: io.github.hugoquinn2 fxpopup 1.1.0 方法一:创建简单的缩略图 …

    用户投稿 2026年9月7日
    200
  • 使用Spring Boot和Langchain探索JLAMA图书馆

    大型语言模型(LLM)正迅速改变着编程领域。LLM能够理解和生成文本,甚至根据文本提示生成代码,为开发者提供了强大的辅助工具。本文将探讨如何利用jlama库将LLM集成到Java生态系统中,并结合Spring Boot和Langchain框架,演示其在实际应用中的强大功能。 jlama库是一个纯Ja…

    用户投稿 2026年9月7日
    100
  • 发展潜能获认可,闻泰科技荣获“最具投资价值先进制造业企业”

    2024财联社第七届投资者年会于上海盛大举行,众多行业领军企业齐聚一堂,共同探讨新旧动能转换下的发展机遇。凭借在半导体领域的突出贡献和巨大发展潜力,闻泰科技荣膺“最具投资价值先进制造业企业”称号。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜…

    2026年9月7日
    100
  • 概率数据结构:Bloom过滤器如何增强大型数据集的性能

    布隆过滤器:原理与应用 布隆过滤器是一种高效的概率数据结构,用于判断一个元素是否属于某个集合。它特别适用于那些对成员资格判断的精确性要求不高,但对速度和空间效率要求很高的场景。 布隆过滤器可以快速判断一个元素肯定不在集合中,或者可能在集合中。 布隆过滤器的主要特性: 空间效率高: 它使用固定大小的内…

    用户投稿 2026年9月7日
    000

发表回复

登录后才能评论
关注微信