>  기사  >  백엔드 개발  >  PHP 웹사이트에서 사진을 수정하는 방법

PHP 웹사이트에서 사진을 수정하는 방법

尚
원래의
2019-10-26 13:29:283738검색

PHP 웹사이트에서 사진을 수정하는 방법

주로 PHP의 GD 라이브러리에 있는 기능을 사용합니다.

upload_image.php는 주로 이미지를 선택하는 데 사용되는 업로드 제어입니다

<html>
    <head>
        <title></title>
        <style type="text/css"></style>
    </head>
    <body>
        <form action="check_image.php" method="post" enctype="multipart/form-data">
            <table>
                <tr>
                    <td>Your username</td>
                    <td><input type="text" name="username" /></td>
                </tr>
                <tr>
                    <td>Upload image*</td>
                    <td><input type="file" name="uploadfile"/></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <small><em> * Acceptable image formats include: GIF, JPG/JPEG and PNG.</em></small>
                    </td>
                </tr>
                <tr>
                    <td>Image Caption</td>
                    <td><input type="text" name="caption"/></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center;">
                        <input type="submit" name="submit" value="Upload" />
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

그런 다음 이미지 업로드 및 처리 논리 check_image.php

<?php 
//修改图片效果
$db = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;Ctrip07185419&#39;) or die(&#39;can not connect to database&#39;);
mysql_select_db(&#39;moviesite&#39;,$db) or die(mysql_error($db));
//上传文件的路径
$dir = &#39;D:\Serious\phpdev\test\images&#39;;

//upload_image.php页面传递过来的参数,如果是上传图片
if($_POST[&#39;submit&#39;] == &#39;Upload&#39;)
{
    if($_FILES[&#39;uploadfile&#39;][&#39;error&#39;] != UPLOAD_ERR_OK)
    {
        switch($_FILES[&#39;uploadfiel&#39;][&#39;error&#39;])
        {
            case UPLOAD_ERR_INI_SIZE:
                die(&#39;The uploaded file exceeds the upload_max_filesize directive&#39;);
            break;
            case UPLOAD_ERR_FORM_SIZE:
                die(&#39;The upload file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form&#39;);
            break;
            case UPLOAD_ERR_PARTIAL:
                die(&#39;The uploaded file was only partially uploaded&#39;);
            break;
            case UPLOAD_ERR_NO_FILE:
                die(&#39;No file was uploaded&#39;);
            break;
            case UPLOAD_ERR_NO_TMP_DIR:
                die(&#39;The server is missing a temporary folder&#39;);
            break;    
            case UPLOAD_ERR_CANT_WRITE:
                die(&#39;The server fail to write the uploaded file to the disk&#39;);
            break;        
            case UPLOAD_ERR_EXTENSION:
                die(&#39;The upload stopped by extension&#39;);
            break;                
        }
    }
    $image_caption = $_POST[&#39;caption&#39;];
    $image_username = $_POST[&#39;username&#39;];
    $image_date = date(&#39;Y-m-d&#39;);
    list($width,$height,$type,$attr) = getimagesize($_FILES[&#39;uploadfile&#39;][&#39;tmp_name&#39;]);
    $error = &#39;The file you upload is not a supported filetype&#39;;
    switch($type)
    {
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($_FILES[&#39;uploadfile&#39;][&#39;tmp_name&#39;]) or die($error);
        break;
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($_FILES[&#39;uploadfile&#39;][&#39;tmp_name&#39;]) or die($error);
        break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($_FILES[&#39;uploadfile&#39;][&#39;tmp_name&#39;]) or die($error);
        break;
        default:
        break;
    }
    $query = &#39;insert into images(image_caption,image_username,image_date) values("&#39;.$image_caption.&#39;" , "&#39;.$image_username.&#39;","&#39;.$image_date.&#39;")&#39;;
    $result = mysql_query($query,$db) or die(mysql_error($db));
    $last_id = mysql_insert_id();
    
    // $imagename = $last_id.&#39;.jpg&#39;;
    // imagejpeg($image,$dir.&#39;/&#39;.$imagename);
    // imagedestroy($image);
    
    $image_id = $last_id;
    imagejpeg($image , $dir.&#39;/&#39;.$image_id.&#39;.jpg&#39;);
    imagedestroy($image);
}
else  //如果图片已经上传,则从数据库中取图片名字
{
    $query = &#39;select image_id,image_caption,image_username,image_date from images where image_id=&#39;.$_POST[&#39;id&#39;];
    $result = mysql_query($query,$db) or die(mysql_error($db));
    extract(mysql_fetch_assoc($result));
    list($width,$height,$type,$attr) = getimagesize($dir.&#39;/&#39;.$image_id.&#39;.jpg&#39;);
}

//如果是保存图片
if($_POST[&#39;submit&#39;] == &#39;Save&#39;)
{
    if(isset($_POST[&#39;id&#39;]) && ctype_digit($_POST[&#39;id&#39;]) && file_exists($dir.&#39;/&#39;.$_POST[&#39;id&#39;].&#39;.jpg&#39;))
    {
        $image = imagecreatefromjpeg($dir.&#39;/&#39;.$_POST[&#39;id&#39;].&#39;.jpg&#39;);
    }
    else
    {
        die(&#39;invalid image specified&#39;);
    }
    $effect = (isset($_POST[&#39;effect&#39;])) ? $_POST[&#39;effect&#39;] : -1;
    switch($effect)
    {
        case IMG_FILTER_NEGATE:
            imagefilter($image , IMG_FILTER_NEGATE);     //将图像中所有颜色反转
        break;
        case IMG_FILTER_GRAYSCALE:
            imagefilter($image , IMG_FILTER_GRAYSCALE);  //将图像转换为灰度的
        break;
        case IMG_FILTER_EMBOSS:
            imagefilter($image , IMG_FILTER_EMBOSS);     //使图像浮雕化
        break;
        case IMG_FILTER_GAUSSIAN_BLUR:
            imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR); //用高斯算法模糊图像
        break;    
    }
    imagejpeg($image , $dir.&#39;/&#39;.$_POST[&#39;id&#39;].&#39;.jpg&#39; , 100);
    ?>
    <html>
        <head>
            <title>Here is your pic!</title>
        </head>
        <body>
            <h1>Your image has been saved!</h1>
            <img src="images/<?php echo $_POST[&#39;id&#39;];?>.jpg" alt="" />
        </body>
    </html>
<?php 
}
else
{
?>
    <html>
        <head>
            <title>Here is your pic!</title>
        </head>
        <body>
            <h1>So how does it feel to be famous?</h1>
            <p>Here is the picture you just uploaded to your servers:</p>
            <!--<img src="images/<?php echo $imagename;?>" alt="" style="float:left;" />-->
        </body>
    </html>
    <?php
        if($_POST[&#39;submit&#39;] == &#39;Upload&#39;)
        {
            $imagename = &#39;images/&#39;.$image_id.&#39;.jpg&#39;;
        }
        else
        {
            $imagename = &#39;image_effect.php?id=&#39;.$image_id.&#39;&e=&#39;.$_POST[&#39;effect&#39;];
        }
    ?>
    <img src="<?php echo $imagename;?>" style="float:left;" alt="" />
    <table>
        <tr>
            <td>Image save as:</td>
            <td><?php $image_id?></td>
        </tr>
        <tr>
            <td>Height:</td>
            <td><?php echo $height;?></td>
        </tr>
        <tr>
            <td>Widht:</td>
            <td><?php echo $width;?></td>
        </tr>
        <tr>
            <td>Upload date:</td>
            <td><?php echo $image_date;?></td>
        </tr>
    </table>
    <p>You may apply a special effect to your image from the list of option below.
    Note:saving an image with any of the filters applied <em>can be undone</em>
    </p>
    <form action="<?php echo $_SERVER[&#39;PHP_SELF&#39;];?>" method="post">
        <div>
            <input type="hidden" name="id" value="<?php echo $image_id;?>"/>
            <select name="effect" id="">
                <option value="-1">None</option>
                <?php 
                    echo &#39;<option value="&#39;.IMG_FILTER_GRAYSCALE.&#39;" &#39;;
                    if(isset($_POST[&#39;effect&#39;]) && $_POST[&#39;effect&#39;] == IMG_FILTER_GRAYSCALE)
                    {
                        echo &#39;selected="selected"&#39;;
                    }
                    echo &#39; >Black and white</option>&#39;;
                    
                    echo &#39;<option value="&#39;.IMG_FILTER_GAUSSIAN_BLUR.&#39;"&#39;;
                    if(isset($_POST[&#39;effect&#39;]) && $_POST[&#39;effect&#39;] == IMG_FILTER_GAUSSIAN_BLUR)
                    {
                        echo &#39; selected="selected"&#39;;
                    }
                    echo &#39;>Blur</option>&#39;;
                    
                    echo &#39;<option value="&#39;.IMG_FILTER_EMBOSS.&#39;"&#39;;
                    if(isset($_POST[&#39;effect&#39;]) && $_POST[&#39;effect&#39;] == IMG_FILTER_EMBOSS)
                    {
                        echo &#39;selected="selected"&#39;;
                    }
                    echo &#39;>Emboss</option>&#39;;
                    
                    echo &#39;<option value="&#39;.IMG_FILTER_NEGATE.&#39;"&#39;;
                    if(isset($_POST[&#39;effect&#39;]) && $_POST[&#39;effect&#39;] == IMG_FILTER_NEGATE)
                    {
                        echo &#39;selected="selected"&#39;;
                    }
                    echo &#39;>Negative</option>&#39;;
                ?>
            </select><br />
            <input type="submit" value="Preview" name="submit" /><br />
            <input type="submit" value="Save" name="submit" />
            
        </div>
    </form>
<?php 
}
?>

마지막으로 그것은 미리보기 효과 페이지 image_효과.php

<?php 
$dir = &#39;D:\Serious\phpdev\test\images&#39;;

if(isset($_GET[&#39;id&#39;]) && ctype_digit($_GET[&#39;id&#39;]) && file_exists($dir.&#39;/&#39;.$_GET[&#39;id&#39;].&#39;.jpg&#39;))
{
    $image = imagecreatefromjpeg($dir.&#39;/&#39;.$_GET[&#39;id&#39;].&#39;.jpg&#39;);
}
else
{
    die(&#39;invalid image specified&#39;);
}

$effect = (isset($_GET[&#39;e&#39;])) ? $_GET[&#39;e&#39;] : -1;

switch($effect)
{
    case IMG_FILTER_NEGATE:
        imagefilter($image , IMG_FILTER_NEGATE);
    break;
    case IMG_FILTER_GRAYSCALE:
        imagefilter($image , IMG_FILTER_GRAYSCALE);
    break;    
    case IMG_FILTER_EMBOSS:
        imagefilter($image , IMG_FILTER_EMBOSS);
    break;    
    case IMG_FILTER_GAUSSIAN_BLUR:
        imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR);
    break;    
}
header(&#39;Content-Type:image/jpeg&#39;);
imagejpeg($image , &#39;&#39; , 100);

?>

imagefilter 메소드를 사용하여 이미지를 처리하면 이미지가 페이지에 출력됩니다. 여기서 imagejpeg 메소드의 두 번째 매개변수는 빈 문자열이므로 표시되지 않습니다. 두 번째 매개변수가 설정되면 원본 이미지를 덮어쓰므로 사용자는 다음과 같이 이미지를 저장하기 전에 효과를 미리 볼 수 있습니다.

header(&#39;Content-Type:image/jpeg&#39;);
imagejpeg($image , &#39;&#39; , 100);

check_image.php에서도 유사한 메서드가 호출되지만 여기에 지정됩니다. 두 번째 매개변수는 이미지를 저장하는 데 사용됩니다:

imagejpeg($image , $dir.&#39;/&#39;.$_POST[&#39;id&#39;].&#39;.jpg&#39; , 100);

PHP에서 이미지를 처리하는 방법:

IMG_FILTER_NEGATE: 이미지의 모든 색상을 반전시킵니다.

IMG_FILTER_GRAYSCALE: 이미지를 회색조로 변환합니다.

IMG_FILTER_BRIGHTNESS: 이미지의 밝기를 변경합니다. arg1을 사용하여 밝기 수준을 설정합니다.

IMG_FILTER_CONTRAST: 이미지의 대비를 변경합니다. 대비 수준을 설정하려면 arg1을 사용하십시오.

IMG_FILTER_COLORIZE: IMG_FILTER_GRAYSCALE과 유사하지만 색상을 지정할 수 있습니다. arg1, arg2 및 arg3을 사용하여 각각 빨간색, 파란색 및 녹색을 지정합니다. 각 색상 범위는 0~255입니다.

IMG_FILTER_EDGEDETECT: 가장자리 감지를 사용하여 이미지 가장자리를 강조 표시합니다.

IMG_FILTER_EMBOSS: 이미지를 양각으로 만듭니다.

IMG_FILTER_GAUSSIAN_BLUR: 가우시안 알고리즘을 사용하여 이미지를 흐리게 합니다.

IMG_FILTER_SELECTIVE_BLUR: 이미지를 흐리게 합니다.

IMG_FILTER_MEAN_REMOVAL: 윤곽선 효과를 얻으려면 평균 제거 방법을 사용합니다.

IMG_FILTER_SMOOTH: 이미지를 더 부드럽게 만듭니다. 부드러움 수준을 설정하려면 arg1을 사용하세요.

위 내용은 PHP 웹사이트에서 사진을 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.