如何删除调整大小(裁剪)的图像上传并防止将来调整大小?

时间:2016-09-28 作者:Mohamed Gamal

我想删除所有调整大小的图像,同时保留原始图像。我有超过20 GB的未使用数据占用了服务器上的空间。例如:

第一个图像名称。jpg-first-image-name-72x72。jpg-first-image-name-150x150。jpg-first-image-name-250x250。jpg

  • first-image-name-300x300。jpg-first-image-name-400x400。jpg-first-image-name-1024x1024。jpg第二个图像名称。jpg第二图像名称72x72。jpg第二图像名称150x150。jpg第二图像名称250x250。jpg-second-image-name-300x300。jpg-second-image-name-400x400。jpg第二图像名称1024x1024。是否有办法删除所有已调整大小的图像,并在将来禁用创建此类图像?

  • 12 个回复
    SO网友:DᴀʀᴛʜVᴀᴅᴇʀ

    大多数答案都涵盖了如何停止创建未来的默认图像大小,但这并不能解释在主题中创建任何自定义大小,但这里有另一个解决方案可以添加到functions.php:

    function wpse_240765_unset_images( $sizes ){
        unset( $sizes[ \'thumbnail\' ]);
        unset( $sizes[ \'medium\' ]);
        unset( $sizes[ \'medium_large\' ] );
        unset( $sizes[ \'large\' ]);
        unset( $sizes[ \'full\' ] );
        return $sizes;
    }
    add_filter( \'intermediate_image_sizes_advanced\', \'wpse_240765_unset_images\' );
    
    您还可以通过将图像设置为零来关闭将来的默认图像生成:

    enter image description here

    但要删除除原件以外的其他图像,我遇到了您的同一个问题,当时我忘记将其设置为不执行,我所做的是:

    使用SFTP服务在本地下载所有照片,我喜欢Transmit (付费)但你可以使用Filezilla (免费)。

    将所有文件下载到一个目录中。

    我使用的是Mac电脑,但任何允许bash的终端都可以工作。我编写了一个简单的bash脚本:

    # !/bin/bash
    
    USERNAME=vader
    DIRECTORY="/Users/$USERNAME/desktop/question240765"
    for imageWithSize in $(find "$DIRECTORY" -type f -regex \'.*/[a-z-]*-[0-9].*.txt$\'); do
        cd $DIRECTORY
        echo rm $imageWithSize
    done
    
    该文件夹位于我的桌面上,对于这个问题,我将其命名为question240765. 我用过.txt 文件进行测试,但您可以将其更改为.jpg. 我将其保存为bash文件image_dust.sh 这样以后我就可以对它进行修改或增强。首先使用echo 您甚至可以通过更改行将其转储到文件:

    echo rm $imageWithSize 
    
    收件人:

    echo rm $imageWithSize >> result.txt
    
    将所有内容记录到文件结果中。并允许您在真正删除它们之前浏览它。如果一切顺利,请将该行更改为:

    rm $imageWithSize
    
    如果你想知道正则表达式是怎么做的:

    • [a-z-]* 查找文件名,如foo-barfo-fo-bar. 如果您的姓名中有大写字母,请使用[A-Za-z-]*
    • -[0-9] 在文件名之后,它会查找剩余的- (破折号)带数字[0-9]
    • .*.txt 查找具有扩展名的名称末尾第一个数字之后的任何内容
    完成脚本编写并运行后。你可以把网站上的一切都吹走,然后重新上传图片。如果你担心文件大小,我甚至会使用imagemagick 但我更喜欢sips 减少图像的压缩大小。

    SO网友:mwdev

    在linux上,您可以使用“find”命令轻松删除文件,只需执行相同的操作即可。可以在bash控制台中运行以下操作:

    cd /var/www/wordpress/wp-content/uploads
    find -type f -regex \'.*[0-9]+x[0-9]+.\\(jpg\\|png\\|jpeg\\)$\' -delete
    

    SO网友:mukto90

    不知道如何删除现有图像。但您可以停止为要上载的新图像生成图像大小。

    If you like to write codes:将此代码段放置在主题的functions.php 文件-

    add_filter( \'intermediate_image_sizes_advanced\', \'wpse_240765_image_sizes\' );
    
    function wpse_240765_image_sizes( $sizes ){
        $sizes = array();
        return $sizes;
    }
    
    Or with a plugin: 使用此插件-https://wordpress.org/plugins/image-sizes/

    它将为您提供相同的输出。您甚至可以选择要阻止创建的图像大小。enter image description here

    SO网友:marikamitsos

    If coding is not your strongest point 您可能想看看插件解决方案。

    我的想法是建议在WordPress存储库中提供两个免费插件:

    • Media Cleaner 通过Jordy Meow
    • Optimize Images Resizing 通过OriginalEXE
    • Thumbnail CleanerMedia Cleaner - 因此,我无法为您提供可靠的意见。

      我用了第二个-Optimize Images Resizing - 并取得了预期的效果。

      在任何情况下都要寻找的要点:

      在尝试任何操作之前,

      • I cannot stretch enough the importance of creating a full backup of your WordPress installation (both your uploads folder and your dB).
        我知道我们谈论的是20GB,但备份是必不可少的,尤其是在这种特殊情况下。

        此过程既耗时又对服务器造成负担
        明智的做法是将站点置于维护模式。

        删除孤立附件

      After all is done 使用您的收藏夹Regenerate Thumbnails 用于恢复WordPress/themes图像大小并安装的插件EWWW Image OptimizerImsanity. 这种组合将保证优化、调整大小,只需要必要的图像。

      插件特定点Media Cleaner

      • 检测到未使用的文件将添加到特定仪表板,您可以在其中选择将其丢弃。然后,它们将被移动到插件内部的垃圾桶中。经过更多测试后,您肯定可以将其丢弃
      Optimize Images Resizing

      • 要删除激活插件之前生成的图像大小,请访问设置->;媒体并使用下面的按钮;删除图像大小“;执行清理Urgent questions on processing existing images
      Thumbnail Cleaner

      包括以下功能:创建上载的备份,分析上载目录,概述原始文件和缩略图的数量,在丢失不应删除的文件时恢复备份Backup only original image

    SO网友:cjbj

    要删除所有多余的图像文件,我们必须遍历所有帖子,找到这些帖子的附件,确定不再需要哪些附加图像大小,然后删除这些文件。我们开始吧。

    第一get all (custom) posts and pages 并循环通过它们:

    $the_query = new WP_Query (array (\'posts_per_page\' => -1, \'post_type\' => \'any\'));
    foreach ($all_posts as $post) { ... }
    
    下一个用于$post get all the attached imagesget a list of all media sizes. 然后循环通过它们:

    $images = get_attached_media (\'image\',$post); // returns array of post objects
    $sizes = get_intermediate_image_sizes(); // returns array of identifying strings
    foreach ($images as $image) {
      foreach ($sizes as $size) {
        ...
        }
      }
    
    现在,对于此图像和大小,find the urldelete the file

    $att = wp_get_attachment_image_src ($image->ID,$size); returns array of file properties
    wp_delete_file ($att[\'url\']);
    
    在应用它之前,我会对这段代码进行彻底的测试。。。由于图像容量为20GB,执行此操作也可能需要一段时间。

    SO网友:Ahmad Awais

    如果您有SSH访问权限,则可以运行以下命令来列出和删除已调整大小的图像。以后可以重建它们。

    列出所有调整大小的图像。

    # List all resized images.
    # Usage: lrimg site.ext
    function lrimg() {
      clear
      THE_PWD=$PWD
      cd ~
      cd /var/www/"$1"/htdocs/wp-content/uploads/
      find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f
      cd $THE_PWD
    }
    
    删除所有已调整大小的图像。

    # Remove all resized images.
    # Usage: lrimgrm site.ext
    function lrimgrm() {
      clear
      THE_PWD=$PWD
      cd ~
      cd /var/www/"$1"/htdocs/wp-content/uploads/
      find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f -exec rm {}  \\;
      cd $THE_PWD
    }
    
    这里要小心。准备好备份。

    P、 我的服务器有一个NGINX设置,这就是为什么站点路径是/var/www/"$1"/htdocs/ $1是作为站点名称的参数。您可以修改它以匹配您的路径。

    SO网友:bristweb

    这里有一种方法可以通过编程实现(大部分情况下)。

    1: 设置媒体大小(例如:缩略图300x300和其余0x0,以防止WP生成缩略图以外的任何内容。)

    2: 使用生成新图像WP CLI, 但在准备好之前,不要删除任何旧尺寸。或者,如果您确实没有保留任何已调整大小的图像,请跳过此操作。

    $ wp media regenerate --skip-delete
    
    3:搜索替换图像路径WP CLI. 这会更新帖子和页面内容,这样您的网站上就不会有损坏的图像。

    正则表达式需要如下所示。

    (\\/wp-content\\/uploads\\/)([0-9]{4}\\/[0-9]{2}\\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\\..{2,4})
    
    Regular expression visualization

    Debuggex Demo

    并将替换以下wp搜索:

    $ wp search-replace \'(\\/wp-content\\/uploads\\/)([0-9]{4}\\/[0-9]{2}\\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\\..{2,4})\' \'$1$2$3$5\' --regex
    
    或者您可能有不同的上载文件夹,或者没有包含年/月文件夹。在这种情况下,你会有稍微不同的正则表达式

    (\\/app\\/uploads\\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\\..{2,4})
    
    Regular expression visualization

    Debuggex Demo

    你会跑的

    $ wp search-replace \'(\\/app\\/uploads\\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\\..{2,4})\' \'$1$2$4\' --regex
    
    Just to be clear: this would make your load times horrible - all images would serve from their full-size file and not the smaller image.使用图像处理API/CDN交换图像服务器可能是一个好主意,这样这些问题就会消失:)

    如果您至少保留了一个缩略图,如我给出的300x300示例,则需要运行稍微不同的正则表达式:

    (\\/wp-content\\/uploads\\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\\..{2,4})
    
    Regular expression visualization

    Debuggex Demo

    然后运行WP-CLI两次。第一个交换不是72x72缩略图的所有图像。后者将所有72x72缩略图更改为新的300x300缩略图

    $ wp search-replace \'(\\/wp-content\\/uploads\\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\\..{2,4})\' \'$1$2$4\' --regex
    
    $ wp search-replace \'(\\/wp-content\\/uploads\\/)(.*)(-72x72)(\\..{2,4})\' \'$1$2-300x300$4\' --regex
    
    4:现在删除所有未使用的图像:

    $ wp media regenerate
    

    SO网友:italiansoda

    1) 要阻止WordPress在上传图像时创建多个图像大小,无需使用插件即可完成。

    导航到Settings > Media 在管理部分。

    通过将大小设置为0 您将禁用WordPress创建默认图像大小,并且只存储原始图像。

    enter image description here

    2) 为了减少站点上20GB的图像,我只需将SFTP导入服务器并手动删除不同大小的图像。从WordPress安装的根目录,导航到wp-content/uploads/<yyyy>/<mm>/ 你会发现你所有的图片和媒体上传。您要确保保留原始图像,否则只需删除整个图像。任何带有额外字符的图像文件名- ###x###.jpg 是自动生成的图像。原始图像的文件名中不会包含此内容。

    顺便说一下,为了帮助您处理图像,我想看看WPMU开发人员的WP Smush插件。

    WP-Smush - Image Optimization

    这真的很棒,当你上传图像时,它会自动使用他们的服务器在存储之前对图像进行处理和压缩。它还可以将大分辨率图像缩小到合理的最大尺寸。您真的不必显示大于2048x2048的图像。

    SO网友:Phill Healey

    流动步骤应做到这一点:

    1) 您应该首先从相关文件(如函数)中删除任何不需要的图像大小。主题和任何插件(如果存在)中的PHP(如无舵)。

    2) 接下来,您可以通过ftp删除所有必需的图像大小。

    3) 然后,您需要重新生成缩略图(例如,Wordpress被告知创建的所有图像大小)您可以使用WP repo中的任何“重新生成缩略图”插件。

    或者尝试以下操作:1)与上面的步骤1相同

    2) 插件目录(repo)中有几个插件,它们将删除所有WP拇指,然后仅在您网站上任何给定页面上第一次调用它们时生成拇指。在后续请求图像时,该图像将已经存在并作为正常图像使用。这样做的好处是,只为站点实际需要的图像/大小创建拇指。但是,可能无法生成以非标准方式调用的图像。

    如果您想减少过大原始图像带来的额外开销,可以使用“imsanity”插件将这些原始图像的物理文件大小减小到您选择的大小。对于用户提交图片的网站来说,这是一个很好的工具。

    SO网友:Brent Pickrel

    我最终使用filezilla通过ftp进行连接。然后,我使用Filezilla中的远程文件搜索功能搜索uploads文件夹。我结合使用regex来选择all和delete。i、 e.\\d\\d\\dx\\d\\d\\d.jpg或\\d\\dx\\d\\d.png或\\d\\d\\dx\\d\\d\\d.gif。我一直在使用不同的组合;\\“d”;查找3位数乘以4位数大小的图像或2位数乘以2位数大小的图像。

    SO网友:Fred

    我不是编码员,但这很有效-在这个url找到它https://crunchify.com/wordpress-tips-how-to-remove-redundant-image-sizes-and-files/

    ssh到public\\u html

    使用以下内容(不带引号)查找指定尺寸的所有图像“;查找-名称-72x72“参考资料”;

    此行删除指定大小的图像“;查找-名称-72x72“xargs rm-f”;

    然后只需将72x72更改为下一个图像大小

    在一秒钟内删除了1000张图像,直到你检查上传的图像并看到它们消失了,你才会认为它不起作用。

    SO网友:Vignesh PV

    我也面临同样的问题,最终找到了解决办法。这对我来说完全有效。我已经清除了近10GB的文件。

    下面的命令行将删除当前调整大小的图像,包括视网膜版本,以便我们可以根据新的主题维度正确调整WordPress图像的大小。是的,我们使用的是命令行,因为我(迈克尔)是个老派。

    cd /home/example/public_html/wp-content/uploads
    
    find . -regextype posix-extended -regex ".*-[[:digit:]]{2,4}x[[:digit:]]{2,4}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f -exec rm {} \\;
    
    参考-https://www.axelerant.com/blog/remove-resize-wordpress-images

    相关推荐

    Wordpress cutting images size

    我目前正在制作一个页面的横幅,过了一段时间,我注意到我的图像质量比我预期的稍差一些。我上传了1920x1024大小的图片,但在我查看管理仪表板后,我注意到它们已经缩小到1024x575!这有什么原因吗?有什么办法可以防止这种情况发生吗?提前感谢!