WordPress 使用 GD 图像引擎以编程方式将图像转换为 WebP 格式

2024-04-13

有许多 PHP 解决方案和 WP 插件,它们都带有我不想要/不需要的附加选项,即如何提供转换后的文件、存储它们的位置等。

我不需要所有这些,并且正在寻找使用 GD 的纯简单代码。我不想使用插件,谢谢。

  1. 编码应该什么时候发生?任何时候你知道这是钩例程中的一个好点,可能是这样https://make.wordpress.org/core/2019/11/05/use-of-the-wp_update_attachment_metadata-filter-as-upload-is-complete-hook/ https://make.wordpress.org/core/2019/11/05/use-of-the-wp_update_attachment_metadata-filter-as-upload-is-complete-hook/但如果您更了解或有其他解决方案,请使用它,并可能让我知道您为什么选择另一个钩子。也就是说,如果更好的话,一旦上传新图像,我也很乐意触发 cron 作业。另外,我不需要在 WP 数据库中拥有转换后图像的元数据,拥有原始图像就可以了.jpeg媒体库中的文件及其元数据.webp文件只是在里面使用picture元素。

  2. 转换后的文件应该存储在哪里?wp-content/uploads/默认文件夹结构,.webp文件应该位于.jpeg文件都在里面。

  3. 应使用GD图像引擎进行转换。https://developer.wordpress.org/reference/classes/wp_image_editor_gd/ https://developer.wordpress.org/reference/classes/wp_image_editor_gd/最近我发现 imagick 总是崩溃或者需要很长时间才能做任何事情。在 WP 5.2 中,imagick 仍然可以正常工作,但一定发生了一些变化,使得在 WP 的更高版本中使用 imagick 毫无用处。我发现 GD 对我来说非常稳定和快速,它创建有损的 WebP 版本并不重要。 WP 的 GD 图像引擎的方法似乎不包括转换/编码https://developer.wordpress.org/reference/classes/wp_image_editor_gd/#methods https://developer.wordpress.org/reference/classes/wp_image_editor_gd/#methods所以我也对 GD 模块中使用的任何方法感到满意https://www.php.net/manual/en/book.image.php https://www.php.net/manual/en/book.image.php关于 WebP 的编码。

  4. 为了摆脱随着时间的推移引入的所有额外不需要的图像尺寸和选项 WP,我在其中添加了这些功能/过滤器functions.php.

function namespace_disable_image_sizes($sizes)
{
    unset($sizes['thumbnail']);    // disable thumbnail size
    unset($sizes['medium']);       // disable medium size
    unset($sizes['large']);        // disable large size
    unset($sizes['medium_large']); // disable medium-large size
    unset($sizes['1536x1536']);    // disable 2x medium-large size
    unset($sizes['2048x2048']);    // disable 2x large size

    return $sizes;
}
add_action('intermediate_image_sizes_advanced', 'namespace_disable_image_sizes');

// disable scaled image size
add_filter('big_image_size_threshold', '__return_false');

// disable rotated image size
add_filter('wp_image_maybe_exif_rotate', '__return_false');

// disable other image sizes
function namespace_disable_other_image_sizes()
{
    remove_image_size('post-thumbnail'); // disable images added via set_post_thumbnail_size()
    remove_image_size('another-size');   // disable any other added image sizes
}
add_action('init', 'namespace_disable_other_image_sizes');
  1. 需要转换高分辨率和大尺寸图像,请参见附图作为示例,图像类型可以是jpeg, png, etc.

  2. 现有的尺寸或多或少都是这些,可能会有变化。

add_image_size('4096w', 4096, 0);
add_image_size('3200w', 3200, 0);
add_image_size('2560w', 2560, 0);
add_image_size('1920w', 1920, 0);
add_image_size('1600w', 1600, 0);
add_image_size('1280w', 1280, 0);
add_image_size('1140w', 1140, 0);
add_image_size('1024w', 1024, 0);
add_image_size('960w', 960, 0);
add_image_size('800w', 800, 0);
add_image_size('768w', 768, 0);
add_image_size('640w', 640, 0);
add_image_size('425w', 425, 0);
add_image_size('320w', 320, 0);
add_image_size('240w', 240, 0);
  1. 我用picture元素或多或少具有以下设置,因此我让浏览器决定需要什么,因此不需要/不需要服务器端.htaccess规则或后端配置。https://dev.opera.com/articles/responsive-images/ https://dev.opera.com/articles/responsive-images/
<picture>
    <source
        sizes="(min-width: 640px) 60vw, 100vw"
        srcset="opera-200.webp 200w,
                opera-400.webp 400w,
                opera-800.webp 800w,
                opera-1200.webp 1200w,
                opera-1600.webp 1600w,
                opera-2000.webp 2000w"
        type="image/webp">
    <img
        src="opera-400.jpg" alt="The Oslo Opera House"
        sizes="(min-width: 640px) 60vw, 100vw"
        srcset="opera-200.jpg 200w,
                opera-400.jpg 400w,
                opera-800.jpg 800w,
                opera-1200.jpg 1200w,
                opera-1600.jpg 1600w,
                opera-2000.jpg 2000w">
</picture>
  1. 我尝试了什么? A)https://wordpress.stackexchange.com/questions/256351/hook-after-image-is-uploaded-and-image-sizes- generated/256352 https://wordpress.stackexchange.com/questions/256351/hook-after-image-is-uploaded-and-image-sizes-generated/256352 b) https://wordpress.stackexchange.com/questions/38582/hook-to-get-image-filename-when-it-is-uploaded https://wordpress.stackexchange.com/questions/38582/hook-to-get-image-filename-when-it-is-uploaded c) WordPress - 上传时模糊图像 https://stackoverflow.com/questions/34377231/wordpress-blur-image-on-upload d) 将图像转换为 WebP https://stackoverflow.com/questions/66815672/convert-images-into-webpe) 我已通读并理解https://kinsta.com/blog/wordpress-hooks/#filters-example-2-insert-content-after-a-post https://kinsta.com/blog/wordpress-hooks/#filters-example-2-insert-content-after-a-post - however我缺少的是一种方法see/know我正在处理哪些数据,即
add_filter('wp_generate_attachment_metadata', 'gd_webp_encode', 10, 3);
function gd_webp_encode($metadata, $attachment_id, $context){
    ob_start();
    echo $attachment_id;
    echo $metadata;
    ob_end_clean();
    return $metadata;
}

不会向我显示任何内容,与尝试登录到控制台或插件文件夹中的文件相同。在不知道/看到数据以及哪些变量名包含哪些数据的情况下,我只是在进行试验、错误和猜测,没有编码。因此,给出上面的代码,首先如何才能查看/知道哪些变量在该时间点保存哪些数据并使其在某个地方可读,即在插件文件夹中的日志文件中?

底线是,上面的设置帮助我理解哪些变量保存哪些数据,即在挂钩中上传后,并包含代码,我可以在其中制作所有尺寸的 WebP 版本以及使用 GD 图像引擎创建的原始版本。


这两个插件都工作得很好(在上传目录中创建 webp 图像),但我想知道如何使用 wp 函数调用 webp 图像(get_the_post_thumbnail_url or wp_get_attachment_url).

在媒体中,您看不到 webp 图像,因此无法选择它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WordPress 使用 GD 图像引擎以编程方式将图像转换为 WebP 格式 的相关文章

  • php 数组用重音符号排序

    我用它来根据姓氏排序 usort fb friends data custom sort function custom sort a b return a last name gt b last name foreach fb frien
  • 如何隐藏实际的下载文件夹位置

    我想隐藏下载文件夹位置 以便用户下载文件时看不到该位置 我认为这可以使用 htaccess 文件来完成 但我该如何做到这一点 或者如何使用 PHP 来完成此操作 我在 PHP 中是这样做的
  • 在 PHP 中获取日期和数字工作日

    我正在用 PHP 开发一个应用程序 我需要使用日期和工作日的数字表示 我尝试过以下方法 today date Y m d number date N strtotime today echo Today today weekday numb
  • bootstrap 一般如何工作,特别是在 Zend Framework 中?

    我正在阅读 Zend Framework 手册 但无法理解引导程序如何工作 特别是在 ZF 和一般情况下 他们写 您的 Bootstrap 类定义了要使用哪些资源和组件 初始化 好的 这意味着应该首先实例化 Bootstrap 类 但随后他
  • 如何在不提交 FORM 的情况下获取 VALUE?

    我想在不提交表单的情况下从表单中获取价值 因为客户必须选择正确的房屋模型类型才能获得适合所选房屋模型的正确表单 无需提交 只需选择房屋模型 例如继续之后的其余形式 到目前为止我已经尝试过这个
  • PHP/MySQL/jQuery 记录的悲观锁定

    我一直在考虑为我参与的应用程序开发一些简单的记录锁定 有一些用户实际上需要花费几个小时才能完成记录的编辑 当其他人想要更改记录时 这会导致问题 目前不涉及锁定 我不确定乐观锁定在我的情况下是否可靠 因为记录是通过 AJAX 请求保存的 我正
  • 使用 Curl 登录 meetup.com

    我正在尝试自动登录 www meetup com 但没有成功 这是我的代码
  • 我可以使用开发者密钥通过 Google Sheets API 无需 Oauth 向 Google Sheet 写入数据吗?

    我正在开发一个使用 Google Sheets API 读取和更新 Google 电子表格中的值的应用程序 我可以使用我的开发人员密钥进行读取 但是尝试写入会返回此错误 请求缺少所需的身份验证凭据 需要 OAuth 2 访问令牌 登录 co
  • 如何将值从 javascript 传递到 php 文件

    我通过以下方式获取价值JQuery像这样的东西 var query popURL split var dim query 1 split var popWidth dim 0 split 1 Gets the first query str
  • Selenium RC:如何检查元素是否具有给定属性?

    我有一些带有onclick属性和一些没有属性 我想检查指定的元素是否具有onclick属性 我怎样才能做到这一点 getAttribute 当有属性值时返回该属性值 如果没有 它会抛出 RuntimeException 并停止测试 即使我将
  • 服务器重新启动时显示等待页面

    我有一个服务器并为其创建一个 Web 界面 如果用户按下页面上的重新启动按钮 则用户将被重定向到reboot php他应该看到一个旋转 gif 直到服务器再次可访问并且服务器通过 shell 执行重新启动 如果服务器可以访问 那么我需要重定
  • 从 PHP/Web 应用程序打印多个标签到 Dymo LabelWriter 450 Turbo

    我希望添加使用 Dymo LabelWriter 450 Turbo 打印多个标签的功能 我已经从 Dymo 网站下载了 DYMO Label v 8 SDK dmg 但看不到任何 Javascript Web 相关的 SDK 文件或文档
  • 如何在PHP中使用curl GET发送原始数据?

    我正在开发 REST API 虽然很容易在 cURL 中为 POST 请求设置原始 JSON 数据 payload json encode array user gt data attach encoded JSON string to t
  • MagicSuggest动态ajax源码

    我在用着魔法建议 https github com nicolasbize magicsuggest对于自动完成输入文本 自动完成提要非常大 因此我无法完整下载它 在他们的示例中 他们提供了以下代码 脚本语言 document ready
  • 如何将 PHP 变量获取到 AJAX?

    我认为我没有在单独的 PHP 和 AJAX 文件之间以正确的方式传递变量 我正在通过触发第二个条件来调试它 status info 在我的 PHP 文件中 现在 status出现为 未定义 alert data status 注册进程 ph
  • 使用 Composer 安装 PHPUNIT

    我有一个关于 Symfony 2 的项目 我想在 Windows 7 上使用 PHPUNIT On githut phpunit is Composer Simply add a dependency on phpunit phpunit
  • /etc/php5/conf.d 文件夹中的 .ini 文件有什么用?

    我知道 ini 文件位于 etc php5 cli与 PHP 的 CLI 使用有关 文件位于 etc php5 fpm是关于 PHP 的 FastCGI FPM 方面 但是位于以下位置的 ini 文件又如何呢 etc php5 conf d
  • 针对 Woocommerce 中多个产品类别计数的 ajax 添加到购物车的 JS 警报

    在 Woocommerce 中 当达到特定产品类别的购物车中的产品的特定数量时 我尝试显示 JavaScript 甜蜜警报 并在达到二级类别的产品的特定数量时显示另一个警报 商品通过 AJAX 添加到购物车 这就是我想使用 JavaScri
  • 将数组值与同一数组中的其他值进行比较

    我想要实现的是 它将循环遍历数组 然后它会检查数组中的项目在三个点上是否相同 product id 尺寸值和颜色值 我想创建一个新数组 其中列出了项目 我唯一不想要的是重复的值 我希望重复的值如果在这三个点上相同 则数量将被计算在一起 就像
  • PHP 命名空间 - 提升一个级别?

    示例1 命名空间 Inori Test 主测试类 示例2 命名空间 Inori Test SubTest SubTest 类扩展了 问题 有没有办法快速提升命名空间的级别 以便 SubTest 可以扩展 MainTest 就像是 MainT

随机推荐

  • 在 Swift 中通过 TouchID 生成哈希或字符串 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想在 Swift 中通过 iPhone 上的 Touch ID 创建一个唯一的字符串或散列 我搜索了很多 但没有找到解决方案 你不可以做这
  • 如何删除 POI 生成的 Excel 中的警告?

    I am using Apache POI for writing content into excel sheet after generating an excel in all the cells which ever cell ha
  • 当被调用的 Activity 退出时,如何以自然的方式返回结果?

    什么工作正常 我的应用程序中有 2 个活动 第一个活动调用第二个活动来获取结果 第二个活动显示了新的布局并允许用户执行某些操作 有一个 确定 按钮 当用户按下此按钮时 第二个活动完成并且用户返回到第一个活动 在幕后 第一个活动像这样调用第二
  • 颤动中底片内的文本框

    我有一个如下所示的底页 It has a text box inside it when I cliked on that I am getting something like 我的文本框完全被键盘覆盖 有什么办法可以解决这个问题吗 下面
  • 获取 Android 上的活动驱动程序列表

    有没有一种简单的方法来获取 Android 设备上当前使用的驱动程序列表 lsmod列出了少量驱动程序 3 但我猜测大多数驱动程序都编译到内核中而不是作为模块 显然 像这样的事情make menuconfig由于设备本身缺乏开发工具 没有机
  • 模板参数数量错误的模板参数

    考虑一个模板类 C 它具有通过模板模板参数设置的策略和两个策略定义 template
  • Python应用程序引擎:如何保存图像?

    这是我从 flex 4 文件参考上传中得到的 自我请求 Request POST UPLOAD Accept text Cache Control no cache Connection Keep Alive Content Length
  • 如何找到一个向量中与另一个向量最接近的值?

    我有两个大小相等的向量 例如 A 2 29 2 56 2 77 2 90 2 05 and B 2 34 2 62 2 67 2 44 2 52 我有兴趣在两个相同大小的向量 A 和 B 中找到最接近的值 几乎相等 即在 A 中的所有元素中
  • Zend 框架 website.com/username

    我正在使用 Zend Framework 开发的应用程序之一要求通过 website com username 访问用户的个人资料页面 而其他页面应通过 website com controller name action name 访问
  • 当从 DataTemplateSelector 显式返回 DataTemplate 时,为什么 DataTemplate 无法绑定到接口?

    我创建了一个 DataTemplateSelector 它是使用一组已知接口进行初始化的 如果传递到选择器的项目实现了这些接口之一 则返回关联的数据模板 首先 这是有问题的 ICategory 接口 public interface ICa
  • 使用 T-SQL Merge 语句时如何避免插入重复记录

    我尝试使用 T SQL 的 MERGE 语句插入许多记录 但当源表中存在重复记录时 我的查询无法 INSERT 失败的原因是 目标表有一个基于两列的主键 源表可能包含违反目标表主键约束的重复记录 抛出 违反主键约束 我正在寻找一种方法来更改
  • 如何在 UML 类图中表示“事件”?

    这是我的代码片段 public class Notation INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged private N
  • Perl:查找并替换多个文本文件中的特定字符串

    我需要获取给定目录中的所有 config 文件 并且在每个文件中我需要搜索特定字符串并根据该文件替换为另一个字符串 例如 如果给定目录中有 3 个文件 for my foo config string to search fooCommon
  • Express 3错误中间件未被调用

    我正在尝试为我的 Express 应用程序设置错误处理并遇到以下问题 我定义了一个错误中间件并将其添加为最后一个中间件 error handler app use function err req res next console log
  • Angular 2 - 在下拉列表中设置所选值

    我在 Angular 2 的下拉列表中预选择值时遇到了问题 我在组件中设置了一个颜色数组 并将其成功绑定到下拉列表 我遇到的问题是在页面初始化上预先选择一个值 线路 selected car color id x id 应该选择已在车型上设
  • 元件之间的聚合物通讯

    我想通过聚合物元素实现子父级之间的通信 这是我的index html
  • T-SQL:带有标识列的 CTE

    我正在构建一棵树 物料清单样式 并转换一些数据 考虑下表 材料清单 BomId ParentId 现在我使用 CTE 来填充它 with BOM as select identity as BomId null as ParentId
  • Windows XP 中的 Internet Explorer 8

    我亲眼目睹了 Internet Explorer 8 IE8 在 Windows XP 中的表现以及在 Windows Vista 7 中的表现 非常奇怪的是 对于 CSS 和 JavaScript 的某些方面 也许对于其他元素也是如此 I
  • android studio 2.2.1 无法解析符号 *

    我过去使用android studio 2 1 1 昨天我下载了android studio 2 2 1 但发现无法解析符号错误 现在我使用android studio 2 1 1 一切正常 我已经尝试过 1 File gt Invalid
  • WordPress 使用 GD 图像引擎以编程方式将图像转换为 WebP 格式

    有许多 PHP 解决方案和 WP 插件 它们都带有我不想要 不需要的附加选项 即如何提供转换后的文件 存储它们的位置等 我不需要所有这些 并且正在寻找使用 GD 的纯简单代码 我不想使用插件 谢谢 编码应该什么时候发生 任何时候你知道这是钩