0

I have this PHP code

if (!isset($_POST["imageSource"])) {
    $_POST["imageSource"] = "test.jpg";
}

list($width, $height) = getimagesize($_POST["imageSource"]);

$viewPortW = $_POST["viewPortW"];
$viewPortH = $_POST["viewPortH"];
$pWidth = $_POST["imageW"];
$pHeight =  $_POST["imageH"];
$ext = end(explode(".",$_POST["imageSource"]));
$function = returnCorrectFunction($ext);
$image = $function($_POST["imageSource"]);
$width = imagesx($image);
$height = imagesy($image);
// Resample
$image_p = imagecreatetruecolor($pWidth, $pHeight);
setTransparency($image,$image_p,$ext);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $pWidth, $pHeight, $width, $height);
imagedestroy($image);
$widthR = imagesx($image_p);
$hegihtR = imagesy($image_p);

$selectorX = $_POST["selectorX"];
$selectorY = $_POST["selectorY"];

if($_POST["imageRotate"]){
    $angle = 360 - $_POST["imageRotate"];
    $image_p = imagerotate($image_p,$angle,0);

    $pWidth = imagesx($image_p);
    $pHeight = imagesy($image_p);

    //print $pWidth."---".$pHeight;

    $diffW = abs($pWidth - $widthR) / 2;
    $diffH = abs($pHeight - $hegihtR) / 2;

    $_POST["imageX"] = ($pWidth > $widthR ? $_POST["imageX"] - $diffW : $_POST["imageX"] + $diffW);
    $_POST["imageY"] = ($pHeight > $hegihtR ? $_POST["imageY"] - $diffH : $_POST["imageY"] + $diffH);
}



$dst_x = $src_x = $dst_y = $src_y = 0;

if($_POST["imageX"] > 0){
    $dst_x = abs($_POST["imageX"]);
}else{
    $src_x = abs($_POST["imageX"]);
}
if($_POST["imageY"] > 0){
    $dst_y = abs($_POST["imageY"]);
}else{
    $src_y = abs($_POST["imageY"]);
}


$viewport = imagecreatetruecolor($_POST["viewPortW"],$_POST["viewPortH"]);
setTransparency($image_p,$viewport,$ext);

imagecopy($viewport, $image_p, $dst_x, $dst_y, $src_x, $src_y, $pWidth, $pHeight);
imagedestroy($image_p);


$selector = imagecreatetruecolor($_POST["selectorW"], $_POST["selectorH"]);
setTransparency($viewport,$selector,$ext);
imagecopy($selector, $viewport, 0, 0, $selectorX, $selectorY, $_POST["viewPortW"], $_POST["viewPortH"]);

if (isset($_GET["destino"]) && !empty($_GET["destino"])) {
    $file = "../../".$_GET["destino"];
} else {
    $file = "test".time().".".$ext;
}

parseImage($ext,$selector,$file);
imagedestroy($viewport);
//Return value
echo $file;
/* Functions */

function determineImageScale($sourceWidth, $sourceHeight, $targetWidth, $targetHeight) {
    $scalex =  $targetWidth / $sourceWidth;
    $scaley =  $targetHeight / $sourceHeight;
    return min($scalex, $scaley);
}

function returnCorrectFunction($ext){
    $function = "";
    switch($ext){
        case "png":
            $function = "imagecreatefrompng";
            break;
        case "jpeg":
            $function = "imagecreatefromjpeg";
            break;
        case "jpg":
            $function = "imagecreatefromjpeg";
            break;
        case "gif":
            $function = "imagecreatefromgif";
            break;
    }
    return $function;
}

function parseImage($ext,$img,$file = null){
    switch($ext){
        case "png":
            imagepng($img,($file != null ? $file : ''));
            break;
        case "jpeg":
            imagejpeg($img,($file ? $file : ''),100);
            break;
        case "jpg":
            imagejpeg($img,($file ? $file : ''),100);
            break;
        case "gif":
            imagegif($img,($file ? $file : ''));
            break;
    }
}

function setTransparency($imgSrc,$imgDest,$ext){

    if($ext == "png" || $ext == "gif"){
        $trnprt_indx = imagecolortransparent($imgSrc);
        // If we have a specific transparent color
        if ($trnprt_indx >= 0) {
            // Get the original image's transparent color's RGB values
            $trnprt_color    = imagecolorsforindex($imgSrc, $trnprt_indx);
            // Allocate the same color in the new image resource
            $trnprt_indx    = imagecolorallocate($imgDest, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
            // Completely fill the background of the new image with allocated color.
            imagefill($imgDest, 0, 0, $trnprt_indx);
            // Set the background color for new image to transparent
            imagecolortransparent($imgDest, $trnprt_indx);
        }
        // Always make a transparent background color for PNGs that don't have one allocated already
        elseif ($ext == "png") {
            // Turn off transparency blending (temporarily)
            imagealphablending($imgDest, true);
            // Create a new transparent color for image
            $color = imagecolorallocatealpha($imgDest, 0, 0, 0, 127);
            // Completely fill the background of the new image with allocated color.
            imagefill($imgDest, 0, 0, $color);
            // Restore transparency blending
            imagesavealpha($imgDest, true);
        }

    }
}

Comes Cropzoom tool

Currently I generated JPG images with black background color. I need to modify it so you can change (from the code) background color of the generated image in JPG format

All other things are working properly.

4

1 に答える 1

1

私は問題を解決しました。

これを使用して、必要と思われるすべての部分に背景色を付けました

$backgroundColor = "FF0000"; // Red, for example
$backgroundColor= '0x'.$backgroundColor;
imagefilledrectangle($FinalImage, 0 , 0 , $width , $height , ($backgroundColor*1));

完全なコード

// Set the Background color    
$background_color = "FFFFFF";
$background_color = "0x".$background_color;

if (!isset($_POST["imageSource"])) {
    $_POST["imageSource"] = "test.jpg";
}

list($width, $height) = getimagesize($_POST["imageSource"]);

$viewPortW = $_POST["viewPortW"];
$viewPortH = $_POST["viewPortH"];
$pWidth = $_POST["imageW"];
$pHeight =  $_POST["imageH"];
$ext = end(explode(".",$_POST["imageSource"]));
$function = returnCorrectFunction($ext);
$image = $function($_POST["imageSource"]);
$width = imagesx($image);
$height = imagesy($image);

// Modified to set background color
$image_p = imagecreatetruecolor($pWidth, $pHeight);

// ****************************************************************
  // ********** NEXT LINE IS NEW TO SET BACKGROUND COLOR **************
// ****************************************************************
imagefilledrectangle($viewport, 0, 0, $pWidth, $pHeight, ($background_color * 1));

setTransparency($image,$image_p,$ext);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $pWidth, $pHeight, $width, $height);
imagedestroy($image);
$widthR = imagesx($image_p);
$hegihtR = imagesy($image_p);

$selectorX = $_POST["selectorX"];
$selectorY = $_POST["selectorY"];

if($_POST["imageRotate"]){
    $angle = 360 - $_POST["imageRotate"];
    $image_p = imagerotate($image_p,$angle,0);

    $pWidth = imagesx($image_p);
    $pHeight = imagesy($image_p);

    //print $pWidth."---".$pHeight;

    $diffW = abs($pWidth - $widthR) / 2;
    $diffH = abs($pHeight - $hegihtR) / 2;

    $_POST["imageX"] = ($pWidth > $widthR ? $_POST["imageX"] - $diffW : $_POST["imageX"] + $diffW);
    $_POST["imageY"] = ($pHeight > $hegihtR ? $_POST["imageY"] - $diffH : $_POST["imageY"] + $diffH);
}



$dst_x = $src_x = $dst_y = $src_y = 0;

if($_POST["imageX"] > 0){
    $dst_x = abs($_POST["imageX"]);
}else{
    $src_x = abs($_POST["imageX"]);
}
if($_POST["imageY"] > 0){
    $dst_y = abs($_POST["imageY"]);
}else{
    $src_y = abs($_POST["imageY"]);
}


$viewport = imagecreatetruecolor($_POST["viewPortW"],$_POST["viewPortH"]);

// ****************************************************************
 // ********** NEXT LINE IS NEW TO SET BACKGROUND COLOR **************
// ****************************************************************
imagefilledrectangle($viewport, 0, 0, $_POST["viewPortW"], $_POST["viewPortH"], ($background_color * 1));


setTransparency($image_p,$viewport,$ext);

imagecopy($viewport, $image_p, $dst_x, $dst_y, $src_x, $src_y, $pWidth, $pHeight);
imagedestroy($image_p);


$selector = imagecreatetruecolor($_POST["selectorW"], $_POST["selectorH"]);

setTransparency($viewport,$selector,$ext);
imagecopy($selector, $viewport, 0, 0, $selectorX, $selectorY, $_POST["viewPortW"], $_POST["viewPortH"]);

if (isset($_GET["destino"]) && !empty($_GET["destino"])) {
    $file = "../../".$_GET["destino"];
} else {
    $file = "test".time().".".$ext;
}

parseImage($ext,$selector,$file);
imagedestroy($viewport);
//Return value
echo $file;
/* Functions */

function determineImageScale($sourceWidth, $sourceHeight, $targetWidth, $targetHeight) {
    $scalex =  $targetWidth / $sourceWidth;
    $scaley =  $targetHeight / $sourceHeight;
    return min($scalex, $scaley);
}

function returnCorrectFunction($ext){
    $function = "";
    switch($ext){
        case "png":
            $function = "imagecreatefrompng";
            break;
        case "jpeg":
            $function = "imagecreatefromjpeg";
            break;
        case "jpg":
            $function = "imagecreatefromjpeg";
            break;
        case "gif":
            $function = "imagecreatefromgif";
            break;
    }
    return $function;
}

function parseImage($ext,$img,$file = null){
    switch($ext){
        case "png":
            imagepng($img,($file != null ? $file : ''));
            break;
        case "jpeg":
            imagejpeg($img,($file ? $file : ''),100);
            break;
        case "jpg":
            imagejpeg($img,($file ? $file : ''),100);
            break;
        case "gif":
            imagegif($img,($file ? $file : ''));
            break;
    }
}

function setTransparency($imgSrc,$imgDest,$ext){

    if($ext == "png" || $ext == "gif"){
        $trnprt_indx = imagecolortransparent($imgSrc);
        // If we have a specific transparent color
        if ($trnprt_indx >= 0) {
            // Get the original image's transparent color's RGB values
            $trnprt_color    = imagecolorsforindex($imgSrc, $trnprt_indx);
            // Allocate the same color in the new image resource
            $trnprt_indx    = imagecolorallocate($imgDest, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
            // Completely fill the background of the new image with allocated color.
            imagefill($imgDest, 0, 0, $trnprt_indx);
            // Set the background color for new image to transparent
            imagecolortransparent($imgDest, $trnprt_indx);
        }
        // Always make a transparent background color for PNGs that don't have one allocated already
        elseif ($ext == "png") {
            // Turn off transparency blending (temporarily)
            imagealphablending($imgDest, true);
            // Create a new transparent color for image
            $color = imagecolorallocatealpha($imgDest, 0, 0, 0, 127);
            // Completely fill the background of the new image with allocated color.
            imagefill($imgDest, 0, 0, $color);
            // Restore transparency blending
            imagesavealpha($imgDest, true);
        }

    }
}  

NEXT LINE IS NEW TO SET Background COLOR」と私が行ったすべてのテストの後に変更され、正しく動作します

于 2013-10-01T07:38:50.243 に答える