osclass增加支持webp格式

1、basic_data.sql

数据表:t_preference中的('osclass', 'allowedExt', 'png,gif,jpg,jpeg', 'STRING'),添加:'png,gif,jpg,jpeg,webp'

2、includes/osclass/mimes.php

'webp' => 'image/webp',

3、includes/osclass/classes/ImageProcessing.php

修改private function __construct($imagePath) {}

switch (@$this->image_info['mime']) {
        case 'image/gif':
            $this->ext = 'gif';
            $this->mime = 'image/gif';
            break;
            
        case 'image/png':
            $this->ext = 'png';
            $this->mime = 'image/png';
            break;
            
        case 'image/webp': // 增加 WebP 处理
            $this->ext = 'webp';
            $this->mime = 'image/webp';
            break;
    
        default:
            $this->ext = 'jpg';
            $this->mime = 'image/jpeg';
    
            if (!$this->_use_imagick) {
                $bg = imagecreatetruecolor($this->_width, $this->_height);
                
                // 处理 PNG、WebP 透明背景
                if (in_array($this->ext, ['png', 'webp'])) {
                    imagefill($bg, 0, 0, imagecolorallocatealpha($bg, 0, 0, 0, 127));
                    imagesavealpha($bg, true);
                    imagealphablending($bg, false);
                } else {
                    imagefill($bg, 0, 0, $this->imageColor($bg));
                    imagesavealpha($bg, true);
                    imagealphablending($bg, true);
                }
    
                imagecopy($bg, $this->im, 0, 0, 0, 0, $this->_width, $this->_height);
                imagedestroy($this->im);
                $this->im = $bg;
            }
            break;
    }

4、savetofile改成

public function saveToFile($imagePath, $ext = null) {
        if (file_exists($imagePath) && !is_writable($imagePath)) {
            throw new RuntimeException("$imagePath is not writable!");
        }
    
        if ($ext == null) {
            $ext = $this->ext;
        }
    
        // 允许 webp 格式
        if (!in_array($ext, ['png', 'gif', 'webp'])) {
            $ext = 'jpeg'; // 默认 jpeg
        }
    //var_dump($ext);
        if ($this->_use_imagick) {
            if ($ext === 'jpeg' && ($this->ext !== 'jpeg' && $this->ext !== 'jpg')) {
                $bg = new Imagick();
                $bg->newImage($this->_width, $this->_height, osc_canvas_background());
                $this->im->thumbnailImage($this->_width, $this->_height, true);
                $bg->compositeImage($this->im, Imagick::COMPOSITE_OVER, 0, 0);
                $this->im = $bg;
                $this->ext = 'jpeg';
            }
    
            $this->im->setImageDepth(8);
            $this->im->setImageFilename($imagePath);
            $this->im->setImageFormat($ext);
            $this->im->writeImage($imagePath);
        } else {
            
            switch ($ext) {
                case 'gif':
                    imagegif($this->im, $imagePath);
                    break;
                case 'png':
                    imagepng($this->im, $imagePath, 0);
                    break;
                case 'webp': // 增加 WebP 处理
                    if (function_exists('imagewebp')) {
                        //var_dump($ext);var_dump('oka');die;
                        imagewebp($this->im, $imagePath);
                    } else {
                        //var_dump($ext);var_dump('okb');die;
                        throw new RuntimeException("WebP format is not supported by GD");
                    }
                    break;
                default:
                    if (($ext === 'jpeg' && ($this->ext !== 'jpeg' && $this->ext !== 'jpg')) || $this->_watermarked) {
                        $this->ext = 'jpeg';
                    }
                    imagejpeg($this->im, $imagePath);
                    break;
            }
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965842.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费windows pdf编辑工具

Epdf(完全免费) 作者:不染心 时间:2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器,目前仍在开发中。它提供了一系列实用的命令行选项,方便用户对 PDF …

星闪开发入门级教程之安装编译器与小项目烧录

系列文章目录 星闪开发入门级教程 好久不见,已经好几年没有发文章了,星闪-作为中国原生的新一代近距离无线联接技术品牌。我想着写点东西。为了适合新手,绝对小白文。 文章目录 系列文章目录前言一、Hispark Studio1.安装Hispark Studio2.安…

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException解决办法

1.问题描述 在编写完一个功能后,第一次启动这个模块的启动类时,报以下错误, 2.文件解决 检查了controller,service和mapper,均未发现有问题,核对了依赖也未发现依赖冲突 在网上也找了资料,有总结的比较好的: controller层service层dao层注解是否都使用正确?接口…

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…

信创数据库使用问题汇总

笔者工作中需要使用多种信创数据库,在使用过程中发现一些问题,现记录如下。 1 OceanBase-Oracle租户的Python连接方式 用Python连接OB数据库的mysql租户可以使用连接mysql的包,但连接oracle租户是没有官方包的,必须使用基于jdbc…

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…

Web3 与区块链:开启透明、安全的网络新时代

在这个信息爆炸的时代,我们对网络的透明性、安全性和隐私保护的需求日益增长。Web3,作为新一代互联网的代表,正携手区块链技术,引领我们走向一个更加透明、安全和去中心化的网络世界。本文将深入探讨 Web3 的基本概念、区块链技术…

[Android] 全球网测-版本号4.3.8

[Android] 全球网测 链接:https://pan.xunlei.com/s/VOIV5G3_UOFWnGuMQ_GlIW2OA1?pwdfrpe# 应用介绍 "全球网测"是由中国信通院产业与规划研究所自主研发的一款拥有宽带测速、上网体验和网络诊断等功能的综合测速软件。APP突出六大亮点优势&#xff1a…

AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型

文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架,正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…

windows 安装nvidaia驱动和cuda

安装nvidaia驱动和cuda 官网搜索下载驱动 https://www.nvidia.cn/drivers/lookup/ 这里查出来的都是最高支持什么版本的cuda 安装时候都默认精简就行 官网下载所需版本的cuda包 https://developer.nvidia.com/cuda-toolkit-archive 安装成功但是nvcc -V 失败 &#xff0c…

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO(通用输入输出引脚) 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断(EXTI) 深入中断(内部机制及原理) 外部中断/事件控…

动态规划(01背包问题)

目录 题目内容题目分析未装满情况思路一思路二代码实现滚动数组优化优化代码 恰好装满情况代码实现滚动数组优化 题目内容 你有一个背包,最多能容纳的体积是V。 现在有n个物品,第i个物品的体积为Vi​,价值为Wi (1)求这个背包至多能…

力扣.270. 最接近的二叉搜索树值(中序遍历思想)

文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的中序遍历) 本题的难点在于可能存在多个答案,并且要返回最小的那一个,为了解决这个问题,我门则要利用上二叉搜索树中序遍历为有序序列的特性,具体到代码中&a…

高效协同,Tita 助力项目管理场景革新

在当今快节奏、高度竞争的商业环境中,企业面临着前所未有的挑战:如何在有限资源下迅速响应市场变化,确保多个项目的高效执行并达成战略目标?答案就在于优化项目集程管理。而在这个过程中,Tita项目管理产品以其独特的优…

Java使用aspose实现pdf转word

Java使用aspose实现pdf转word 一、下载aspose-pdf-21.6.jar包【下载地址】&#xff0c;存放目录结构如图&#xff1b;配置pom.xml。 <!--pdf to word--> <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId>…

【数据结构-C语言】绪论

文章目录 一、前言二、基本概念和术语2.1 数据元素、数据项和数据对象2.2 数据结构2.2.1 逻辑结构2.2.2 存储结构 2.3 时间复杂度 一、前言 数据结构部分是根据严蔚敏老师的《数据结构-C语言版第2版》书中内容整理的。 二、基本概念和术语 2.1 数据元素、数据项和数据对象 …

anaconda中可以import cv2,但是notebook中cv2 module not found

一、问题 anaconda中成功import cv2 但是jupyter notebook中却无法导入cv2 二、排查 anaconda中使用python路径如下&#xff1a; jupyter notebook中使用python路径如下&#xff1a; 可以发现路径不一致。 三、解决 ①查看可用的kernel ②选中想要修改的kernel&#xff0c;打…

华北平原shp格式范围

华北平原是中国东部的重要地理区域&#xff0c;以下是对其的简要介绍&#xff1a; 此数据为付费数据&#xff0c;如有需求&#xff0c;请联系本人。 1. 地理位置与范围 位置&#xff1a;位于中国东部&#xff0c;西起太行山脉和伏牛山&#xff0c;东至黄海、渤海&#xff0c;北…

MySQL - 字段内分组

1、MySQL 5.7及之前版本 SELECT A.要显示的字段名称,FIRST_VALUE : A.分组字段名称,last :IF(FIRST_VALUE A.分组字段名称, last 1, 1 ) AS rn,FROM 表1 A,(SELECT last : 0, FIRST_VALUE : NULL ) BORDER BY A.排序字段例&#xff1a;SELECT A.DLR_CODE,A.VAILD_CARD_NO,A.L…

【FPGA】 MIPS 12条整数指令 【3】

实现乘除 修改框架 EX&#xff1a;实现带符号乘除法和无符号乘除法 HiLo寄存器&#xff1a;用于存放乘法和除法的运算结果。Hi、Lo为32bit寄存器。电路描述与实现RegFile思想一致 仿真 代码 DataMem.v include "define.v"; module DataMem(input wire clk,input…