web-dev-qa-db-fra.com

Redimensionner toutes les images

Je viens de changer le thème sur mon blog, et à cause d'une petite largeur de page, la mise en page est cassée. La plupart de mes images précédentes (attachées dans des publications) mesurent environ 600 pixels de large et je dois maintenant les redimensionner toutes proportionnellement à 450 pixels. Comment puis-je les redimensionner d'un seul coup? Y a-t-il un plugin pour cela?

P.S .: Écrire une règle CSS est une bonne option, et je l’ai déjà fait. Mais je pense que redimensionner les images réduirait également la charge de téléchargement de chaque page!

4
GPX

J'ai posé une question similaire mais plus large , et je dois encore faire des recherches et écrire une réponse complète. En attendant, voici quelques conseils qui pourraient vous aider:

J'ai écrit un ensemble de plugins qui redimensionne toutes les images à la taille utilisée dans l'éditeur . Cela fonctionne en convertissant <img src="image.jpg" width="200" height="400"/> en <img src="image-200x400.jpg" width="200" height="400"/> ( Redimensionner les étiquettes img ) et en capturant et générant ces tailles intermédiaires manquantes sur demande ( Sur-Demande Resizer ). Vous devriez pouvoir faire la première partie en bloc, puis laisser le second plugin gérer les nouvelles images. Cela fonctionne aussi avec des informations partielles: image-200x.jpg retournera une image redimensionnée proportionnellement de 200 pixels de large.

Régénérer les miniatures recrée effectivement des images de différentes tailles, mais je ne pense pas que le contenu de votre message sera également mis à jour pour faire référence à ces images? Pire encore, s'il supprime les anciennes tailles intermédiaires, votre publication fera toujours référence au image-600x400.jpg, qui n'existe plus, au lieu de image-450x300.jpg.

5
Jan Fabry

Connectez-vous à votre serveur et accédez au répertoire racine de votre wordpress. Puis exécutez:

cd wp-content/uploads/;
for img in `find . -name *.jpg -printf '%p\n'`
do
  mogrify -resize "450>x" $img;
done

Cela redimensionnera chaque JPG de votre dossier de téléchargement (et de tous les sous-dossiers!) Plus large que 450px par rapport à cette largeur. Si vous avez des fichiers PNG, GIF, ... recommencez avec la fin du fichier correspondant.

Je suppose que vous utilisez le dossier de téléchargement standard (adaptez la première ligne sinon) et que votre serveur a installé imagemagick.

Aucune garantie, bien sûr.

3
Raphael

Essayez le plugin 'Regenerate Thumbnails', il fait exactement ce que vous cherchez.

http://www.viper007bond.com/wordpress-plugins/regenerate-thumbnails/

1
Ben
if ( defined( 'WP_CLI' ) && WP_CLI ) {
    class RegenThumbs extends WP_CLI_Command
    {
        var $errors = false;
        var $unique_size_name = 'past_favourites';
          var $unique_size = 170; 

        public function __construct()
        {
            global $wpdb;

            if ( !$images = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' ORDER BY ID asc" ) ) {
                WP_CLI::error( "Unable to find any images. Are you sure some exist?" );
                return;
            }

            WP_CLI::line( 'Found ' . count( $images ) . ' pictures to regenerate!' );

            foreach ( $images as $image )
                $this->process( $image->ID );

            if ( $this->errors )
                WP_CLI::error( 'Finished regenerating images - however, there were some errors throughout.' );
            else
                WP_CLI::success( 'Finished - without any errors either!' );
        }

        function process( $id=false )
        {
        if( ! $id )
        return;            

            $image = get_post( $id );

            if ( !$image || 'attachment' != $image->post_type || 'image/' != substr( $image->post_mime_type, 0, 6 ) ) {
                $this->errors = true;
                WP_CLI::line( "FAILED: {$image->post_title} - invalid image ID" );
                return;
            }

        $meta_data = wp_get_attachment_metadata( $image->ID );

        if( isset( $meta_data['sizes'][ $this->unique_size_name ] ) && $meta_data['sizes'][ $this->unique_size_name  ]['width'] == $this->unique_size )
        {
        WP_CLI::line( "SKIPPED: $image->ID - There is an image called " . $this->unique_size_name );
        return;
        }

        $fullsizepath = str_replace( array( 
                        '/home/username/public_html/', 
                        '/home/17196/domains/domain.com/html/',
                        '/nfs/c02/h07/mnt/17196/domains/domain.com/html/',
                        '/mnt/gs02/herd04/17196/domains/domain.com/html/',
                        '/nfs/c02/h04/mnt/17196/domains/domain.com/html/'
                   ), 
                    '/srv/www/domain.com/current/', 
                    get_attached_file( $image->ID ) 
            );

            if ( false === $fullsizepath || !file_exists( $fullsizepath ) ) {
                $this->errors = true;
                WP_CLI::line( "FAILED: {$image->post_title} -  Can't find it $fullsizepath" );
                return;
            }

            // 5 minutes per image should be PLENTY
            @set_time_limit( 900 );

            $array_path = explode( DIRECTORY_SEPARATOR, $fullsizepath );
            $array_file = explode( '.', $array_path[ count( $array_path ) - 1 ] );

            $imageFormat = $array_file[ count( $array_file ) - 1 ];

            unset( $array_path[ count( $array_path ) - 1 ] );
            unset( $array_file[ count( $array_file ) - 1 ] );

            $imagePath = implode( DIRECTORY_SEPARATOR, $array_path ) . DIRECTORY_SEPARATOR . implode( '.', $array_file );
            $dirPath   = explode( DIRECTORY_SEPARATOR, $imagePath );
            $imageName = sprintf( "%s-", $dirPath[ count( $dirPath ) - 1 ] );
            unset( $dirPath[ count( $dirPath ) - 1 ] );
            $dirPath = sprintf( "%s%s", implode( DIRECTORY_SEPARATOR, $dirPath ), DIRECTORY_SEPARATOR );

            // Read and delete files
            $dir   = opendir( $dirPath );
            $files = array();
            while ( $file = readdir( $dir ) ) {
                if ( !( strrpos( $file, $imageName ) === false ) ) {
                    $thumbnail = explode( $imageName, $file );
                    if ( $thumbnail[ 0 ] == "" ) {
                        $thumbnailFormat = substr( $thumbnail[ 1 ], -4 );
                        $thumbnail       = substr( $thumbnail[ 1 ], 0, strlen( $thumbnail[ 1 ] ) - 4 );
                        $thumbnail       = explode( 'x', $thumbnail );
                        if ( count( $thumbnail ) == 2 ) {
                            if ( is_numeric( $thumbnail[ 0 ] ) && is_numeric( $thumbnail[ 1 ] ) ) {
                                WP_CLI::line( "Thumbnail: {$thumbnail[0]} x {$thumbnail[1]} was deleted." );
                                @unlink( $dirPath . $imageName . $thumbnail[ 0 ] . 'x' . $thumbnail[ 1 ] . $thumbnailFormat );
                            }
                        }
                    }
                }
            }

            $metadata = wp_generate_attachment_metadata( $image->ID, $fullsizepath );

            if ( is_wp_error( $metadata ) ) {
                WP_CLI::line( $metadata->get_error_message() );
                return;
            }

            if ( empty( $metadata ) ) {
                $this->errors = true;
                WP_CLI::line( 'Unknown failure reason.' );
                return;
            }
            wp_update_attachment_metadata( $image->ID, $metadata );
            WP_CLI::line( esc_html( get_the_title( $image->ID ) ) . " (ID {$image->ID}): All thumbnails were successfully regenerated in  " . timer_stop() . "  seconds " );
        }

    }
    WP_CLI::addCommand( 'regen_thumbs', 'RegenThumbs' );
}

Exemple de thème Wordpress: image

0
Rıdvan Coşkun