删除特定大小的图像

时间:2015-03-29 作者:chap

我从以前的一位开发者那里继承了一个WordPress网站,他对图像大小有点疯狂。当我将其上传到服务器时,我注意到每个图像至少有10个图像大小。这导致了一个很长的9小时上传时间。

在网站上,我估计实际使用的图像尺寸只有3-4种。

我的问题是,有没有办法删除特定大小的所有图像?

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

是啊,我们曾经发生过类似的事情。我们的一位高级开发人员和我的老师Tahmina Akter女士为我们编写了以下代码。虽然它太粗糙了,也有一些不推荐使用的PHP函数(我修复了它们并更新了代码),但它还是可以工作的。

CAUTION: Handle it with PROPER CARE, 因为它是DEVASTATING.

代码的工作原理:

由于它是一个页面模板,请将文件放在主题中,添加新页面,然后在此处选择模板进行更改$_DELETE_IMAGES = false;true 触发代码

  • $filename = $up_dir[\'basedir\'] . \'/2013/12/\'; 在这里,提及您的/uploads/ 目录中,您要从中删除一组图像,因为WordPress以通用格式存储所有图像大小,如:filename-WxH.ext, 因此,我们以宽度参数为目标,忽略高度部分,并说if ( preg_match( \'/\\.(jpg|png|jpeg|gif)$/\', $file ) ): <匹配连字符和我们提到的宽度,高度可以是任何值,然后继续下一步,现在打开WordPress页面一次,代码将被执行,其余代码将从/uploads/YYYY/MM/ 目录
  • 每次重新加载都将执行一次代码。因此,我们希望每次执行都会删除所有图像束,但如果直到有其他不必要的图像大小,您可以转到步骤#3,将大小更改为特定大小,然后重新加载页面以运行要删除的代码。

    <?php
    /**
     * Template Name: Remove Image
     */
    
    $_DELETE_IMAGES = false;
    
    if( $_DELETE_IMAGES ) {
    
        $upload_dir   = wp_upload_dir();
    
        $target_path  = $upload_dir[\'basedir\'] .\'/2018/03/\';
        $images       = array();
        $sized_images = array();
    
        // Grab all the images first (jpg, png, jpeg, gif).
        $dir = opendir( $target_path );
        while ( $file = readdir( $dir ) ) {
            if ( preg_match( \'/\\.(jpg|png|jpeg|gif)$/\', $file ) ) {
                $images[] = $file;
            }
        }
    
        // Keep images only of the defined sizes.
        while (sizeof($images) != 0){
            $img = array_pop($images);
            if ( preg_match("~\\-300x~",$img) || preg_match("~\\-624x~",$img) || preg_match("~\\-570x~",$img) ) {
                $sized_images[] = $img;
            }
        }
    
        // Now iterate thorough grabbed images and delete/unlink() \'em
        while ( sizeof($sized_images) != 0 ) {
            $target_image = array_pop( $sized_images );
            $the_file     = $target_path . $target_image;
    
            if ( file_exists($the_file) ) {
                unlink($the_file); // delete the file
                printf( "File %s has been deleted.<br>", $the_file );
            } else {
                printf( "File %s cannont be deleted, because it&rsquo;s not existed.<br>", $the_file );
            }
        }
    
    } else {
        echo \'Deletion of image is currently off\';
    }
    

    SO网友:Fernando Baltazar

    Im使用插件重新生成所有上传的照片,并删除所有未在功能上注册的照片。php或任何其他文件来初始化文件大小。插件名为强制重新生成缩略图(link here) 这将节省存储空间。因此,您需要注销不需要的图像大小的行。

    结束

    相关推荐

    定义`GET_POST_QUALUALY_Images`的大小,它们似乎已调整为150x150

    我正在使用get_post_gallery_images 它可以输出150x150的图像。它看起来不需要大小参数,所以我假设它只会显示最大的图像,或者最好是我定义的一个大小。150x150太小了,有没有地方可以声明我想要多大尺寸的画廊图片?例如,我正在做:<?php $gallery = get_post_gallery_images( $post ); foreach ($gallery as $img) { ?> <li><img src