[Плагин] Приведение картинки к стандартному размеру

Тема в разделе "Wordpress", создана пользователем BiOM, 10 апр 2012.

Статус темы:
Закрыта.
Модераторы: DzSoft, Sorcus
  1. BiOM

    BiOM Создатель

    Регистр.:
    27 июн 2007
    Сообщения:
    39
    Симпатии:
    20
    Стала тут передомной задача - в онлайн шоп на WP картинки закидывать. Но смотрятся они коряво из за разной ориентации. Решил все привести к квадратам, благо у картинок задник белый. Поискал плагины, чтобы не обрезали, а вписывали картинки в нужный формат. Не нашелю Сделал свой - дарю!


    Создать файл "biom_image_fit.php", скопировать в него ниженаписанное и закинуть в папку плагинов.
    Можно настроить сжатие результирующей картинки, размеры итоговой картинки и цвет задника.

    PHP:
    <?php
    /*
    Plugin Name: BiOM Image Fit
    Plugin URI: http://biomsoft.com
    Description: Fit image to size
    Author: BiOM
    Version: 0.1
    Author URI: http://biomsoft.com/
    */
     
    function biom_image_fit_add_options() {
        
    $options = array(
            
    'imagequality' => 75,
            
    'maxwidth' => 600,
            
    'maxheight' => 600,
            
    'bgcolor' => "#FFFFFF"
        
    );
        
    add_option('biom_image_fit'$options);
        return 
    $options;
    }
     
    function 
    biom_image_fit_test($arg) {
        
    $status get_user_meta(wp_get_current_user()->data->ID'biom_image_fit'true);
        if(
    $status == 'disabled') {
            return 
    $arg;
        }
        
    $options get_option('biom_image_fit');
        if(!
    is_array($options)) {
            
    $options biom_image_fit_add_options();
        }
        
    $ext strtolower(substr(strrchr($arg['file'], '.'), 1));
        if(
    $ext == 'jpg' || $ext == 'jpeg') {
            
    $im imagecreatefromjpeg($arg['file']);
        } elseif(
    $ext == 'png') {
            
    $im imagecreatefrompng($arg['file']);
        } elseif(
    $ext == 'gif') {
            
    $im imagecreatefromgif($arg['file']);
        }
       
        
    $imgdata getimagesize($arg['file']);
        
    $pre_width $imgdata[0];
        
    $pre_height $imgdata[1];
       
        if(
    $pre_width $options['maxwidth'] || $pre_height $options['maxheight']) {
            if(
    $pre_width $pre_height) {
                
    $width $options['maxwidth'];
                
    $height round($options['maxwidth'] * $pre_height $pre_width);
            } else {
                
    $height $options['maxheight'];
                
    $width round($options['maxheight'] * $pre_width $pre_height);
            }
        } else {
            
    $width $pre_width;
            
    $height $pre_height;
        }
       
        
    $final_image imagecreatetruecolor($width$height);
        
    imagecopyresampled($final_image$im0000$width$height$pre_width$pre_height);
     
        
    imagejpeg($final_imagesubstr($arg['file'], 0strlen($arg['file']) - strlen($ext)) . 'jpg'$options['imagequality']);
     
        
    imagedestroy($im);
        
    imagedestroy($final_image);
       
        
    $out = array(
            
    'file' => substr($arg['file'], 0strlen($arg['file']) - strlen($ext)) . 'jpg',
            
    'url' => substr($arg['url'], 0strlen($arg['url']) - strlen($ext)) . 'jpg',
            
    'type' => 'image/jpeg'
        
    );
       
        if(
    $out['file'] != $arg['file']) {
            
    unlink($arg['file']);
        }
       
        return 
    $out;
    }
     
     
    function 
    biom_image_fit_resize($arg){
     
        
    $status get_user_meta(wp_get_current_user()->data->ID'biom_image_fit'true);
        if(
    $status == 'disabled') {
            return 
    $arg;
        }
        
    $options get_option('biom_image_fit');
        if(!
    is_array($options)) {
            
    $options biom_image_fit_add_options();
        }
       
     
        
    $box_w $options['maxwidth'];
        
    $box_h $options['maxheight'];
        
    $color biom_image_fit_html2rgb($options['bgcolor']);
        
    $r $color['r'];
        
    $g $color['g'];
        
    $b $color['b'];
     
     
        
    $background ImageCreateTrueColor($box_w$box_h);
        
    $color=imagecolorallocate($background$r$g$b);
        
    imagefill($background00$color);
        
    $ext strtolower(substr(strrchr($arg['file'], '.'), 1));
        if(
    $ext == 'jpg' || $ext == 'jpeg') {
            
    $image imagecreatefromjpeg($arg['file']);
        } elseif(
    $ext == 'png') {
            
    $image imagecreatefrompng($arg['file']);
        } elseif(
    $ext == 'gif') {
            
    $image imagecreatefromgif($arg['file']);
        }
        if (
    $image === false) { die ('Unable to open image'); }
        
    $imgdata getimagesize($arg['file']);
        
    $w $imgdata[0];
        
    $h $imgdata[1];
        
    $ratio=$w/$h;
        
    $target_ratio=$box_w/$box_h;
        if (
    $ratio>$target_ratio){
            
    $new_w=$box_w;
            
    $new_h=round($box_w/$ratio);
            
    $x_offset=0;
            
    $y_offset=round(($box_h-$new_h)/2);
        }else {
            
    $new_h=$box_h;
            
    $new_w=round($box_h*$ratio);
            
    $x_offset=round(($box_w-$new_w)/2);
            
    $y_offset=0;
        }
        
    $insert ImageCreateTrueColor($new_w$new_h);
        if (
    $insert === false) { die ('Unable to create insert'); }
        
    imagecopyResampled ($insert$image0000$new_w$new_h$w$h);
        
    imagecopymerge($background,$insert,$x_offset,$y_offset,0,0,$new_w,$new_h,100);
        
    imagejpeg($backgroundsubstr($arg['file'], 0strlen($arg['file']) - strlen($ext)) . 'jpg'$options['imagequality']);
        
    imagedestroy($insert);
        
    imagedestroy($background);
       
       
        
    $out = array(
            
    'file' => substr($arg['file'], 0strlen($arg['file']) - strlen($ext)) . 'jpg',
            
    'url' => substr($arg['url'], 0strlen($arg['url']) - strlen($ext)) . 'jpg',
            
    'type' => 'image/jpeg'
        
    );
       
        if(
    $out['file'] != $arg['file']) {
            
    unlink($arg['file']);
        }
       
        return 
    $out;
     
    }
     
    function 
    biom_image_fit_html2rgb($color)
    {
        if (
    $color[0] == '#')
            
    $color substr($color1);
     
        if (
    strlen($color) == 6)
            list(
    $r$g$b) = array($color[0].$color[1],
                                    
    $color[2].$color[3],
                                    
    $color[4].$color[5]);
        elseif (
    strlen($color) == 3)
            list(
    $r$g$b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
        else
            return 
    false;
     
        
    $r hexdec($r); $g hexdec($g); $b hexdec($b);
     
        return array(
    "r"=>$r"g"=>$g"b"=>$b);
    }
     
     
     
    function 
    biom_image_fit_admin() {
        if(!empty(
    $_POST['update_fs_image_compress'])) {
            
    $options = array();
            if(!
    preg_match('/\d+/'$_POST['imagequality'])) {
                
    $options['imagequality'] = 75;
            } else {
                
    $options['imagequality'] = $_POST['imagequality'];
            }
            if(!
    preg_match('/\d+/'$_POST['maxwidth'])) {
                
    $options['maxwidth'] = 600;
            } else {
                
    $options['maxwidth'] = $_POST['maxwidth'];
            }
            if(!
    preg_match('/\d+/'$_POST['maxheight'])) {
                
    $options['maxheight'] = 600;
            } else {
                
    $options['maxheight'] = $_POST['maxheight'];
            }
     
            
    $options['bgcolor'] = isset($_POST['bgcolor']) ? $_POST['bgcolor'] : "FFFFFF";
     
            
    update_option('biom_image_fit'$options);
            echo 
    '<div id="message" class="updated fade"><p><strong>BiOM Image Fit options has been updated.</strong></p></div>';
        } else {
            
    $options get_option('biom_image_fit');
            if(!
    is_array($options)) {
                
    $options biom_image_fit_add_options();
            }
        }
        
    ?>
        <div class="wrap"><h2>BiOM Image Fit</h2>
        <p>Please use the options below to configure BiOM Image Fit.</p>
        <form action="" method="post">
        <table>
            <tr>
                <td>Image Quality</td>
                <td><input type="text" name="imagequality" value="<?php echo $options['imagequality']; ?>" /></td>
            </tr>
            <tr>
                <td>Image Width</td>
                <td><input type="text" name="maxwidth" value="<?php echo $options['maxwidth']; ?>" /></td>
            </tr>
            <tr>
                <td>Image Height</td>
                <td><input type="text" name="maxheight" value="<?php echo $options['maxheight']; ?>" /></td>
            </tr>
            <tr>
                <td>Background color</td>
                <td><input type="text" name="bgcolor" value="<?php echo $options['bgcolor']; ?>" /></td>
            </tr>
        </table>
        <input type="submit" name="update_fs_image_compress" value="Update Options" />
        </form>
        </div>
    <?php }
     
    function 
    biom_image_fit_custom() {
        
    $userID wp_get_current_user()->data->ID;
       
        if(!empty(
    $_POST['biom_image_fit_direction'])) {
            if(
    $_POST['biom_image_fit_direction'] == 'Enable') {
                
    delete_user_meta($userID'biom_image_fit');
            } else {
                
    add_user_meta($userID'biom_image_fit''disabled'true);
            }
        }
       
        
    $status get_user_meta($userID'biom_image_fit'true);
     
        if(
    $status != 'disabled') {
            
    $verb 'Disable';
            
    $current '<span style="color:green">Enabled</span>';
        } else {
            
    $verb 'Enable';
            
    $current '<span style="color:red">Disabled</span>';
        }
        
    ?>
        <div class="wrap"><h2>BiOM Image Fit - Disable Compression</h2>
            <p>Status: <?php echo $current?></p>
            <form action="" method="post">
                <input type="hidden" name="biom_image_fit_direction" value="<?php echo $verb?>" />
                <input type="submit" name="biom_image_fit_action" value="<?php echo $verb?> BiOM Image Fit" />
            </form>
        </div>
    <?php }
     
    function 
    biom_image_fit_menu() {
        
    add_options_page('BiOM Image Fit''BiOM Image Fit'8basename(__FILE__), 'biom_image_fit_admin');
        
    add_submenu_page('upload.php''BiOM Image Fit''BiOM Image Fit'8basename(__FILE__), 'biom_image_fit_custom');
     
    }
     
    function 
    biom_image_fit_footer() {
        echo 
    '<p align="center">Image compression on this page is provided by <a href="http://biomsoft.com/" target="_blank">BiOM Image Fit</a></p>';
    }
    if(
    $_COOKIE['biom_image_fit_status'] != 'disabled') {
        
    add_filter('wp_handle_upload''biom_image_fit_resize');
    }
    add_action('admin_menu''biom_image_fit_menu');
    //add_action('wp_footer', 'biom_image_fit_footer');
     
    ws256, Xp10r3r и latteo нравится это.
Статус темы:
Закрыта.