За последние 24 часа нас посетили 17193 программиста и 1302 робота. Сейчас ищут 1682 программиста ...

Наложение маски

Тема в разделе "Обработка изображений средствами PHP", создана пользователем Александер, 8 фев 2007.

  1. Александер

    Александер Активный пользователь

    С нами с:
    21 ноя 2006
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Москва
    Нужно сделать маску: чтобы отображалась только часть изображения (внутри прямоугольника с закругленными углами). Помогите плиз.
     
  2. scor

    scor Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    22
    Симпатии:
    0
    imagecopymerge — Copy and merge part of an image

    Вот пример использования.
    Код (Text):
    1.  
    2. function watermark($sourcefile, $watermarkfile) {
    3.  
    4.    #
    5.    # $sourcefile = Filename of the picture to be watermarked.
    6.    # $watermarkfile = Filename of the 24-bit PNG watermark file.
    7.    #
    8.    
    9.    //Get the resource ids of the pictures
    10.    $watermarkfile_id = imagecreatefrompng($watermarkfile);
    11.    
    12.    imageAlphaBlending($watermarkfile_id, false);
    13.    imageSaveAlpha($watermarkfile_id, true);
    14.  
    15.    $fileType = strtolower(substr($sourcefile, strlen($sourcefile)-3));
    16.  
    17.    switch($fileType) {
    18.        case('gif'):
    19.            $sourcefile_id = imagecreatefromgif($sourcefile);
    20.            break;
    21.            
    22.        case('png'):
    23.            $sourcefile_id = imagecreatefrompng($sourcefile);
    24.            break;
    25.            
    26.        default:
    27.            $sourcefile_id = imagecreatefromjpeg($sourcefile);
    28.    }
    29.  
    30.    //Get the sizes of both pix  
    31.   $sourcefile_width=imageSX($sourcefile_id);
    32.   $sourcefile_height=imageSY($sourcefile_id);
    33.   $watermarkfile_width=imageSX($watermarkfile_id);
    34.   $watermarkfile_height=imageSY($watermarkfile_id);
    35.  
    36.    $dest_x = ( $sourcefile_width / 2 ) - ( $watermarkfile_width / 2 );
    37.    $dest_y = ( $sourcefile_height / 2 ) - ( $watermarkfile_height / 2 );
    38.    
    39.    // if a gif, we have to upsample it to a truecolor image
    40.    if($fileType == 'gif') {
    41.        // create an empty truecolor container
    42.        $tempimage = imagecreatetruecolor($sourcefile_width,
    43.                                                                            $sourcefile_height);
    44.        
    45.        // copy the 8-bit gif into the truecolor image
    46.        imagecopy($tempimage, $sourcefile_id, 0, 0, 0, 0,
    47.                            $sourcefile_width, $sourcefile_height);
    48.        
    49.        // copy the source_id int
    50.        $sourcefile_id = $tempimage;
    51.    }
    52.  
    53.    imagecopy($sourcefile_id, $watermarkfile_id, $dest_x, $dest_y, 0, 0,
    54.                        $watermarkfile_width, $watermarkfile_height);
    55.  
    56.    //Create a jpeg out of the modified picture
    57.    switch($fileType) {
    58.    
    59.        // remember we don't need gif any more, so we use only png or jpeg.
    60.        // See the upsaple code immediately above to see how we handle gifs
    61.        case('png'):
    62.            header("Content-type: image/png");
    63.            imagepng ($sourcefile_id);
    64.            break;
    65.            
    66.        default:
    67.            header("Content-type: image/jpg");
    68.            imagejpeg ($sourcefile_id);
    69.    }          
    70.  
    71.    imagedestroy($sourcefile_id);
    72.    imagedestroy($watermarkfile_id);
    73.    
    74. }