Actual fondo es negro. Cómo cambiar el color a blanco?

    #assuming the mime type is correct
switch ($imgtype) {
case 'image/jpeg':
$source = imagecreatefromjpeg($source_image);
break;
case 'image/gif':
$source = imagecreatefromgif($source_image);
break;
case 'image/png':
$source = imagecreatefrompng($source_image);
break;
default:
die('Invalid image type.');
}
#Figure out the dimensions of the image and the dimensions of the desired thumbnail
$src_w = imagesx($source);
$src_h = imagesy($source);
#Do some math to figure out which way we'll need to crop the image
#to get it proportional to the new size, then crop or adjust as needed
$width  = $info[0];
$height = $info[1];
$x_ratio = $tn_w / $src_w;
$y_ratio = $tn_h / $src_h;
if (($x_ratio * $height) < $tn_w) {
$new_h = ceil($x_ratio * $height);
$new_w  = $tn_w;
} else {
$new_w  = ceil($y_ratio * $width);
$new_h = $tn_h;
}  
$x_mid  = $new_w / 2;
$y_mid  = $new_h / 2;   
$newpic = imagecreatetruecolor(round($new_w), round($new_h));
imagecopyresampled($newpic, $source, 0, 0, 0, 0, $new_w, $new_h, $src_w, $src_h);
$final = imagecreatetruecolor($tn_w, $tn_h);
imagecopyresampled($final, $newpic, 0, 0, ($x_mid - ($tn_w / 2)), ($y_mid - ($tn_h / 2)), $tn_w, $tn_h, $tn_w, $tn_h);
#if we need to add a watermark
if ($wmsource) {
#find out what type of image the watermark is
$info    = getimagesize($wmsource);
$imgtype = image_type_to_mime_type($info[2]);
#assuming the mime type is correct
switch ($imgtype) {
case 'image/jpeg':
$watermark = imagecreatefromjpeg($wmsource);
break;
case 'image/gif':
$watermark = imagecreatefromgif($wmsource);
break;
case 'image/png':
$watermark = imagecreatefrompng($wmsource);
break;
default:
die('Invalid watermark type.');
}
#if we're adding a watermark, figure out the size of the watermark
#and then place the watermark image on the bottom right of the image
$wm_w = imagesx($watermark);
$wm_h = imagesy($watermark);
imagecopy($final, $watermark, $tn_w - $wm_w, $tn_h - $wm_h, 0, 0, $tn_w, $tn_h);
}
if (imagejpeg($final, $destination, $quality)) {
return true;
}
return false;
}

Negro & Blanco

¿Cómo relleno de fondo blanco, mientras que redimensionar la imagen

OriginalEl autor Blur | 2010-12-18

2 Comentarios

  1. 25
    $final = imagecreatetruecolor($tn_w, $tn_h);
    $backgroundColor = imagecolorallocate($final, 255, 255, 255);
    imagefill($final, 0, 0, $backgroundColor);
    //imagecopyresampled($final, $newpic, 0, 0, ($x_mid - ($tn_w /2)), ($y_mid - ($tn_h /2)), $tn_w, $tn_h, $tn_w, $tn_h);
    imagecopy($final, $newpic, (($tn_w - $new_w)/ 2), (($tn_h - $new_h) / 2), 0, 0, $new_w, $new_h);

    Aquí está la secuencia de comandos completa (probado con retrato, el paisaje y la plaza jpg):

    <?php
    function resize($source_image, $destination, $tn_w, $tn_h, $quality = 100, $wmsource = false)
    {
    $info = getimagesize($source_image);
    $imgtype = image_type_to_mime_type($info[2]);
    #assuming the mime type is correct
    switch ($imgtype) {
    case 'image/jpeg':
    $source = imagecreatefromjpeg($source_image);
    break;
    case 'image/gif':
    $source = imagecreatefromgif($source_image);
    break;
    case 'image/png':
    $source = imagecreatefrompng($source_image);
    break;
    default:
    die('Invalid image type.');
    }
    #Figure out the dimensions of the image and the dimensions of the desired thumbnail
    $src_w = imagesx($source);
    $src_h = imagesy($source);
    #Do some math to figure out which way we'll need to crop the image
    #to get it proportional to the new size, then crop or adjust as needed
    $x_ratio = $tn_w / $src_w;
    $y_ratio = $tn_h / $src_h;
    if (($src_w <= $tn_w) && ($src_h <= $tn_h)) {
    $new_w = $src_w;
    $new_h = $src_h;
    } elseif (($x_ratio * $src_h) < $tn_h) {
    $new_h = ceil($x_ratio * $src_h);
    $new_w = $tn_w;
    } else {
    $new_w = ceil($y_ratio * $src_w);
    $new_h = $tn_h;
    }
    $newpic = imagecreatetruecolor(round($new_w), round($new_h));
    imagecopyresampled($newpic, $source, 0, 0, 0, 0, $new_w, $new_h, $src_w, $src_h);
    $final = imagecreatetruecolor($tn_w, $tn_h);
    $backgroundColor = imagecolorallocate($final, 255, 255, 255);
    imagefill($final, 0, 0, $backgroundColor);
    //imagecopyresampled($final, $newpic, 0, 0, ($x_mid - ($tn_w /2)), ($y_mid - ($tn_h /2)), $tn_w, $tn_h, $tn_w, $tn_h);
    imagecopy($final, $newpic, (($tn_w - $new_w)/ 2), (($tn_h - $new_h) / 2), 0, 0, $new_w, $new_h);
    #if we need to add a watermark
    if ($wmsource) {
    #find out what type of image the watermark is
    $info    = getimagesize($wmsource);
    $imgtype = image_type_to_mime_type($info[2]);
    #assuming the mime type is correct
    switch ($imgtype) {
    case 'image/jpeg':
    $watermark = imagecreatefromjpeg($wmsource);
    break;
    case 'image/gif':
    $watermark = imagecreatefromgif($wmsource);
    break;
    case 'image/png':
    $watermark = imagecreatefrompng($wmsource);
    break;
    default:
    die('Invalid watermark type.');
    }
    #if we're adding a watermark, figure out the size of the watermark
    #and then place the watermark image on the bottom right of the image
    $wm_w = imagesx($watermark);
    $wm_h = imagesy($watermark);
    imagecopy($final, $watermark, $tn_w - $wm_w, $tn_h - $wm_h, 0, 0, $tn_w, $tn_h);
    }
    if (imagejpeg($final, $destination, $quality)) {
    return true;
    }
    return false;
    }
    resize('teszt2.jpg', 'out.jpg', 100, 100);
    ?>
    <img src="out.jpg">
    Yo no puede conseguir que funcione. La imagen de fondo, siendo la mitad blanco y mitad negro.
    Hay algunos errores de lógica en su última imagecopyresampled(). Creo, puede utilizar imagecopy() aquí, porque la imagen que los recursos son en su tamaño final en este punto, por lo que el editado respuesta está más cerca de la solución, pero necesita un poco de trabajo (el posicionamiento parece estar mal, pero el fondo es adecuado ahora).
    En realidad he utilizado el script de goo.gl/62sXo y cambiar la parte de matemáticas para obtener restringir las proporciones de la imagen. estoy atascado
    Muchas gracias, realmente necesitaba que una línea de código. 😀
    Funciona como un encanto.

    OriginalEl autor István Ujj-Mészáros

  2. 3

    Este es trabajo para mí. Aunque, lógicamente, parece que debe llenar toda la imagen con la $bgcolor, sólo llena las partes que están «detrás» de la imagen remuestreada.

    imagecopyresampled($resized_image, $original_image, $xoffset, $yoffset, 0, 0, $new_width, $new_height, $orig_width, $orig_height);
    $bgcolor = imagecolorallocate($resized_image, $red, $green, $blue);
    imagefill($resized_image, 0, 0, $bgcolor);

    OriginalEl autor Lisa DeBruine

Dejar respuesta

Please enter your comment!
Please enter your name here