【问题标题】:Force Wordpress to create Thumbnails of same Size as the uploaded Image强制 Wordpress 创建与上传图片大小相同的缩略图
【发布时间】:2012-11-07 18:02:47
【问题描述】:

据我所知,Wordpress 仅在所需图像尺寸较小时(而不是在目标尺寸相同时)生成缩略图(例如,“大”)。

我用

add_image_size( 'referenzen-big', 627, 490, true );

所以如果我的客户上传一个 627x490px 的文件,就会使用原始图片。

但这不是我们所希望的,因为这是出于善意的习惯,它会以正确的大小上传图像,并且还可以进行最高的 .jpg 压缩。在这种情况下,这导致图像大约为 300kB。

一种实用但技术上并非完美无缺的方法是让他上传 628x490 的图像,因此宽度增加 1px,从而强制重新缩放。这样的建议将不被接受:-)

到目前为止,我已经调查了负责图像创建的钩子,并跟踪了负责的函数;这是我找到的最后一个钩子: image_make_intermediate_size()

这是负责实际调整大小的函数: image_resize_dimensions()。 甚至有一句话说:

// if the resulting image would be the same size or larger we don't want to resize it
if ( $new_w >= $orig_w && $new_h >= $orig_h )
    return false;

那么我该如何启用这个“强制调整大小”功能呢?

【问题讨论】:

  • 据我了解您的担忧,请问在可用时使用原始尺寸有什么问题?
  • 上传的图片太大了,300kB左右,对于相关页面来说太大了。
  • 你可以随时降低质量(如果是jpg):add_filter('jpeg_quality', 'jpeg_quality_callback'); function jpeg_quality_callback($arg) { return (int)100; // or 80 or whatever }
  • 请注意这一段: > 但这不是我们所希望的,因为这个习惯,真诚地,上传正确尺寸的图像,并且尽可能高的 .jpg 压缩。在这种情况下,这会导致图像大小约为 300kB。
  • 检查wordpress.stackexchange.com/questions/21544/… 中接受的答案,以获得该问题的良好答案。您可以使用 wp_get_attachment_image() 实现相同的目的

标签: image wordpress resize


【解决方案1】:

没关系,我换了核心。内心很痛,但对于这个项目来说,这是最好的解决方案。

【讨论】:

  • 我也在为这个确切的问题寻找解决方案。我不想强迫我的客户在上传之前必须使用 Photoshop 来减少图像文件端。除了破解内核之外还有什么解决方案?
  • 人们,这不好笑......我,全能的线程开启者因为发布了实际有效的实际解决方案而被否决。感谢您迄今为止在研究此问题方面的帮助,但现在我回到自己的洞穴......
  • 更不用说升级核心后更改 WordPress 的核心也无济于事。改变核心从来都不是一个合适的解决方案……总会有一个钩子,你只需要知道在哪里看:)
  • 是的,请告诉我我一定错过了那个神秘的钩子......没有,这就是为什么让它工作的唯一选择毕竟改变核心......至少回到 2012 年
  • 我确实在我的回答中告诉过你神秘的钩子……。
【解决方案2】:

虽然仍然不是最佳选择,但使用像 Timthumb 这样的服务器端库然后提供原始源并使用“q”(=质量)参数不是更好吗?

这将使用原始大小优化图像。

可能是一些警告,但实际上 - 任何事情都比修改核心更好。

【讨论】:

    【解决方案3】:

    如果磁盘空间不是问题,而只是下载速度,就像我的情况一样......

    我面临的问题是客户没有注意特征图像上传的大小或尺寸。该主题是一个响应式主题,适用于图像高度范围并缩放到页面中所需的图像宽度。因此,如果坐在高速网络上,可以上传非常大的文件而不会注意到大小。

    我添加了自定义图像大小,使用插件强制重新生成并修改了主题以显示自定义大小。

    【讨论】:

    • 你用的是什么插件?
    【解决方案4】:

    您可以使用此插件访问https://wordpress.org/plugins/simple-image-sizes/

    简单的图像尺寸

    此插件允许为您的站点创建自定义图像大小。直接在媒体选项页面上覆盖您的主题大小。您可以重新生成刚刚创建的所有尺​​寸并选择要重新生成的尺寸。您现在可以将所有代码复制并粘贴到您的函数主题文件中。现在您可以直接在帖子中使用生成的尺寸,并以正确的尺寸插入图片!现在您选择是否要在插入后的图像中显示大小。现在您可以在“媒体”常规窗格中一张一张地重新生成图像。现在,您可以通过“媒体”常规窗格中的批量操作重新生成图像。现在您可以在单个附件编辑页面上重新生成图像大小。


    【讨论】:

    • 完全不相关的答案;你读过我的问题吗?
    • 嗨塞巴斯蒂安,你试过这个插件吗codecanyon.net/item/theia-smart-thumbnails-for-wordpress/…
    • 没有。你认为它将如何解决我的问题?你完全理解我的问题了吗?抱歉,我厌倦了人们推荐一些通用的“set-custom-image-sizes”插件和代码。这不是问题。
    • 嗨塞巴斯蒂安,我完全理解你的问题。我试图给你最接近的解决方案。 1.简单的图像大小插件:帮助您进行正常裁剪和硬裁剪。所需尺寸。请安装并检查。 2. Codecanyon 插件:它将帮助您保存图像,具有精确的外观。用户可以按照他想要的方式裁剪。我们只是为您提供最接近的解决方案。
    【解决方案5】:

    WordPress 的默认图片大小为“缩略图”、“中”、“大”和“全”(您上传的图片的大小)。这些图像大小可以在设置 > 媒体下的 WordPress 管理媒体面板中进行配置。这就是您可以使用 the_post_thumbnail() 使用这些默认大小的方法:

    the_post_thumbnail();                  // without parameter -> 'post-thumbnail'
    the_post_thumbnail('thumbnail');       // Thumbnail (default 150px x 150px max)
    the_post_thumbnail('medium');          // Medium resolution (default 300px x 300px max)
    the_post_thumbnail('large');           // Large resolution (default 640px x 640px max)
    the_post_thumbnail('full');            // Full resolution (original size uploaded)
    the_post_thumbnail( array(100,100) );  // Other resolutions
    

    另请参阅http://codex.wordpress.org/Function_Reference/the_post_thumbnail 中的完整文档

    【讨论】:

    • 您还可以使用<?php the_post_thumbnail('thumbnail', array('class' => 'alignleft'), array()); ?> 和自定义大小为您自己的类提供帖子缩略图。 <?php the_post_thumbnail('thumbnail', array(200, 200)); ?>
    • 我不明白这应该如何回答我的问题,'那么我该如何启用这个“强制调整大小”功能?'
    • 你可以用它来强制任何大小,the_post_thumbnail(array(100,100)); // 其他分辨率
    【解决方案6】:

    这是您正在寻找的解决方案,将放在您的 functions.php 文件中:

    function thumbnail_upscale( $default, $orig_w, $orig_h, $new_w, $new_h, $crop ){
        if ( !$crop ) return null; // let the wordpress default function handle this
    
        $aspect_ratio = $orig_w / $orig_h;
        $size_ratio = max($new_w / $orig_w, $new_h / $orig_h);
    
        $crop_w = round($new_w / $size_ratio);
        $crop_h = round($new_h / $size_ratio);
    
        $s_x = floor( ($orig_w - $crop_w) / 2 );
        $s_y = floor( ($orig_h - $crop_h) / 2 );
    
        return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
    }
    add_filter( 'image_resize_dimensions', 'thumbnail_upscale', 10, 6 );
    

    这里可以找到: https://wordpress.stackexchange.com/questions/50649/how-to-scale-up-featured-post-thumbnail

    它将放大图像并为所有图像尺寸生成缩略图。唯一的失败,可能不是失败,是无论你会为所有上传的图像的每个图像大小获得一个单独的文件......即使它是一个小图标或其他东西。希望这会有所帮助。

    【讨论】:

      【解决方案7】:

      我也遇到过类似的问题:客户网站应该产生更大的拇指。我最终构建了一个带有自定义图像编辑器的插件,如下所示:

      require_once ABSPATH . WPINC . '/class-wp-image-editor.php';
      require_once ABSPATH . WPINC . '/class-wp-image-editor-gd.php';
      
      function im_add_image_editor($implementations) {
          array_unshift($implementations, 'IM_Image_Editor_GD');
          return $implementations;
      }
      add_filter('wp_image_editors', 'im_add_image_editor');
      

      IM_Image_Editor_GD 扩展了 WP_Image_Editor_GD,将 _resize 函数(调用 image_resize_dimensions)更改为调用它的内部版本,如下所示:

      class IM_Image_Editor_GD extends WP_Image_Editor_GD {
          public function __destruct() {
              parent::__destruct();
          }
      
          protected function _resize( $max_w, $max_h, $crop = false ) {
              $dims = $this->image_resize_dimensions( $this->size['width'], $this->size['height'], $max_w, $max_h, $crop );
              if ( ! $dims ) {
                  return new WP_Error( 'error_getting_dimensions', __('Could not calculate resized image dimensions'), $this->file );
              }
              list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims;
      
              $resized = wp_imagecreatetruecolor( $dst_w, $dst_h );
              imagecopyresampled( $resized, $this->image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
      
              if ( is_resource( $resized ) ) {
                  $this->update_size( $dst_w, $dst_h );
                  return $resized;
              }
      
              return new WP_Error( 'image_resize_error', __('Image resize failed.'), $this->file );
          }
      
          protected function image_resize_dimensions($orig_w, $orig_h, $dest_w, $dest_h, $crop = false) {
              // Copied original image_resize_dimensions and changed the test
          }
      }
      

      希望这对我的英语有所帮助和抱歉!

      【讨论】:

        猜你喜欢
        • 2011-03-06
        • 2013-05-31
        • 1970-01-01
        • 2015-08-30
        • 2013-06-22
        • 1970-01-01
        • 2019-02-03
        • 2013-10-26
        相关资源
        最近更新 更多