为什么WordPress会自动裁剪我所有的图片?

时间:2013-11-21 作者:abhishek360

我是WordPress的新手,当我上传任何图像时,WordPress会自动裁剪成自己的大小,我在媒体部分(Settings»;media)中没有提到。

我保存在媒体中的设置为:
Setting which i saved in media.

当我签入目录时,它会自动裁剪成以下大小:
enter image description here

这件事是怎么发生的?

5 个回复
最合适的回答,由SO网友:Mayeenul Islam 整理而成

默认情况下,WordPress设计用于对任何上载的图像(媒体)生成3种类型的裁剪:

缩略图(通常为150px×150px)中等(通常为300px×300px)

  • 大(通常为1024px×1024px)
    • 这是为了确保必要时不同尺寸的站点速度。因此,上载原始图像时,至少会有4个文件-

      原始文件(未裁剪)、大文件、中文件和缩略图/wp-admin/options-media.php, 也可以更改默认尺寸的尺寸。因此,您仍然可以使用默认大小进行自定义。但是,如果您仍然需要三个以外的新尺寸,WordPress也允许您添加新的图像尺寸。

      使用add_image_size() 带有所需参数的函数允许您为站点添加新大小。将该函数用于functions.php 要添加所需的图像大小,请执行以下操作:

      add_image_size( $name, $width, $height, $crop );
      
      其中-
      $name : 字符串在单引号内写下名称,即。\'portfolio\'
      $width: 整数写入所需的宽度,即。500 (像素)
      $height: 整数写下您想要的高度,即。300 (像素)
      $crop: 布尔值true 如果要硬裁剪图像,请使用false

      通常,我们可以使用以下方法在主题的任何位置调用不同的特色图像:

      the_post_thumbnail( \'medium\' ); //it will display only the medium size of the original image
      
      如果要使用新尺寸,请使用:

      the_post_thumbnail( \'portfolio\' ); //as I named my size as \'portfolio\'
      
      WARNING: 默认情况下,WordPress会生成3个可自定义的图像大小,因此会为每个图像创建4个文件。使用更多新大小将增加站点主机中的文件数。因此,使用更多的图像大小将是站点主机空间问题的一个问题,它将消耗更多的站点空间。

      编辑,添加每个新的图像大小后,最重要的插件是:

      »Regenerate Thumbnail — WordPress Plugin

      实际上,新指定的图像大小只能用于新上传的图像。因此,要获得之前上传的所有图像的新大小,您需要安装插件并重新生成所有缩略图。这将是一项一次性措施,将永远持续下去*。

      你的主要答案应该是:
      Site Speed: WordPress裁剪图像以提高网站速度。如果您使用Google PageSpeed,您将知道它建议:

      Serve scaled images
      适当调整图像大小可以保存许多字节的数据
      Learn More

      如果您的插件使用类似的add_image_size() 函数,它可以创建新的图像大小。因此,在禁用插件后,如果使用“重新生成缩略图”插件重新生成缩略图,则将获得实际大小。如果这没有帮助,那么检查你的主题functions.php 或任何添加的函数文件add_image_size() 功能,现在您知道要做什么了。

    SO网友:kaiser

    是,WordPress调整大小(&P);根据您的主题所定义的@Gerard,裁剪所有图像。Gerard在回答中已经解释了这一点。最后一个布尔参数add_image_size() 是否裁剪。请注意,这并不定义裁剪位置。改变这种行为look at this answer for example.

    核心内部发生了什么

    正如您在add_image_size(), WP使用global $_wp_additiona_image_sizes 存储(&A);处理图像生成的设置。现在,当您上载图像时WP_Image_Editor 进入游戏,根据服务器上启用的PHP扩展,可以调用WP_Image_Editor_GDWP_Image_Editor_Imagick. 现在两个单身汉都有resize() 调用image_resize_dimensions(). 最后,image_resize_dimensions()not 调整图像大小或裁剪图像。它只是计算值。

    这是通过以下方法完成的crop() 在里面the Imagick class 并使用PHPs nativeimagecopyresampled() GD类内部。

    如何禁用裁剪

    首先,我们有很多可能性:

    检测正在使用哪个类(支持哪个PHP ext.),然后拦截用于裁剪的内容(见上文)image_resize_dimensions() 这就是工作我们将在这里使用后面的方法。请随意添加您自己的解决方案作为单独的答案。以下是core为我们提供的:一个保存所有参数的过滤器。

    $output = apply_filters( \'image_resize_dimensions\', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop ); 
    
    第一个论点是null, 这将在下一行告诉core我们是否要覆盖此函数的内部功能,并用我们自己的行为替换它。所以如果我们除了null, 那么这就是核心将要使用的。请记住,您可以将任何内容放在那里,但core仍然期望与image_resize_dimensions() 按默认值使用。从内联注释中:

    返回数组将参数匹配到imagecopyresampled():

    int dst_x, int dst_y,

    int src_x, int src_y,

    一二add_image_size()二现在要禁用crop,我们必须替换(换言之:克隆)整个内部-这是我们想要避免的。因此,我们使用的是;一次性过滤器“;这会使其自身失效。我们这样做是为了使用内部结构,但只是去掉我们不需要的东西。

    <?php
    defined( \'ABSPATH\' ) or exit;
    /* Plugin Name: (#124009) Disable image crop */
    
    add_filter( \'image_resize_dimensions\', \'wpse124009DisableCrop\', 10, 6 );
    function wpse124009DisableCrop( $enable, $orig_w, $orig_h, $dest_w, $dest_h, $crop )
    {
        // Instantly disable this filter after the first run
        remove_filter( current_filter(), __FUNCTION__ );
    
        return image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, false );
    }
    
    现在,到处都禁用裁剪。如果您正在运行multisite,或者不想考虑是否启用了此插件,只需将其用作mu插件即可。

    请记住,以上不是经过测试的,而是在阅读核心源代码后从我的脑海中注销的

    其他信息

    有关中图像处理类的更多信息the slides of Marko from WordCamp Europe 可以找到演示视频on WordPress.tv.

    SO网友:Unix

    通常这是因为Wordpress主题在其代码上使用缩略图:在循环、库等中。它是在文件函数中定义的。php:

    add_image_size( $name, $width, $height, $crop );
    
    例如,如下所示:

    add_theme_support(\'post-thumbnails\');
    add_image_size(\'custom-thumbnail\', 80, 80, true );
    add_image_size(\'medium-thumbnail\', 180, 120, true );
    add_image_size(\'large-thumbnail\', 571, 300, true );
    
    如果你真的想保持主题的良好运行,我不建议你删除代码。如果要删除它,需要删除使用它的其他文件中的调用;通常在文件循环中。php。

    SO网友:Gerald Schneider

    插件和主题可以定义自己的缩略图大小。WordPress会将所有新上传的图像转换为所有注册的大小定义。

    SO网友:Feriman

    要禁用裁剪,请在中插入以下代码disable-automatic-image-crop.php mu插件文件夹中的文件:

    <?php
    /*
    Plugin Name: Disable Automatic Image Crop
    Author: Wordpress Community
    Description: https://gist.github.com/czenzel/0f5888cbbfa4a857e56361dd3bc19b39
    */
    add_action( \'init\', \'czc_disable_extra_image_sizes\' );
    add_filter( \'image_resize_dimensions\', \'czc_disable_crop\', 10, 6 );
    function czc_disable_crop( $enable, $orig_w, $orig_h, $dest_w, $dest_h, $crop )
    {
        // Instantly disable this filter after the first run
        // remove_filter( current_filter(), __FUNCTION__ );
        // return image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, false );
        return false;
    }
    function czc_disable_extra_image_sizes() {
        foreach ( get_intermediate_image_sizes() as $size ) {
            remove_image_size( $size );
        }
    }
    ?>
    

    结束

    相关推荐

    Featured Image keeps cropping

    我花了几个小时试图弄明白这一点,这让我抓狂。我对php代码不是很在行,所以我不确定我是不是用最好的方式。。。它应该很简单-我已经构建了一个自定义主题,我所要做的就是显示一个缩略图,点击后链接到灯箱效果。我希望缩略图的尺寸为214宽x无限高,灯箱效果的尺寸为500宽x无限高。禁止裁剪。我从当前的代码中得到的是214 x 214的裁剪缩略图和500 x 500的裁剪lightbox。为什么要修剪?我已经在wordpress管理员中检查了媒体设置,这没有什么区别-假设我的代码正在覆盖这些设置(?)在我的函数中,