在PHP / Javascript中创建图像,在图像周围提供灰色输出

时间:2014-07-27 18:13:34

标签: javascript php image

这是链接和访问,看看我的意思。

  

DEMO: http://img01.fr/test4/

如果我尝试将图像裁剪得太小,它会输出正确的尺寸和正确的图像,但你可以看到它周围的灰色。

我不知道如何改变它,这是在javascript中调用的save.php'

<?php

if($_SERVER['REQUEST_METHOD'] == "POST") {

    // image name
    $name = sha1(uniqid(mt_rand(), true));

    // location to save cropped image
    $url = 'temp/'.$name.'.jpg';

    $dst_x = 0;
    $dst_y = 0;

    $src_x = $_POST['x']; // crop Start x
    $src_y = $_POST['y']; // crop Srart y

    $src_w = $_POST['w']; // $src_x + $dst_w
    $src_h = $_POST['h']; // $src_y + $dst_h

    // set a specific size for the image
    // the default is to grab the width and height from the cropped imagee.
    $dst_w = 240;
    $dst_h = 240;

    // remove the base64 part
    $base64 = $_POST['image'];

    // if URL is a base64 string
    if (substr($base64, 0, 5) == 'data:') {
        // remove data from image
        $base64 = preg_replace('#^data:image/[^;]+;base64,#', '', $base64);
        $base64 = base64_decode($base64);
        // create image from string
        $source = imagecreatefromstring($base64);
    }
    else {
        // strip parameters from URL
        $base64 = strtok($base64, '?');

        list($height, $width, $type) = getimagesize($base64);

        // create image
        if ($type == 1)
            $source = imagecreatefromgif($base64);
        else if ($type == 2)
            $source = imagecreatefromjpeg($base64);
        else if ($type == 3) {
            $source = imagecreatefrompng($base64);

        // keep transparent background
        //imagealphablending($image, FALSE);
        //imagesavealpha($image, TRUE);

    }
    else die();

    }

    $image = imagecreatetruecolor($dst_w, $dst_h);

    imagecopyresampled($image, $source, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
    $white = imagecolorallocate($image, 255, 255, 255);
    imagefill($image, 0, 0, $white);
    // save image
    imagejpeg($image, $url, 100);

    // return URL
    $validation = array (
        'url'     => $url
    );

    echo json_encode($validation);
}

我希望周围只有白色,而不是灰色的东西。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您需要在复制重采样之前填充图像:

$image = imagecreatetruecolor($dst_w, $dst_h);

$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

imagecopyresampled($image, $source, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);

我也看到JavaScript传递了无效的x,y,w和h参数,然后PHP脚本使用这些参数来调整图像大小。例如,我试用了该页面并发送了以下POST参数:

x=-297.61904761904765&y=-297.61904761904765&w=595.2380952380953&h=595.2380952380953

因为输入图像仅为250×500,所以{5}对于$src_w$src_h来说都太大了。负数也没有意义。