>  기사  >  백엔드 개발  >  PHP는 카메라를 호출하여 사진을 찍고 실시간 필터를 추가합니다: 빠른 시작 가이드

PHP는 카메라를 호출하여 사진을 찍고 실시간 필터를 추가합니다: 빠른 시작 가이드

WBOY
WBOY원래의
2023-07-31 21:27:191264검색

PHP는 카메라를 호출하여 사진을 찍고 실시간 필터를 추가합니다: 빠른 시작 가이드

사진 기술은 지속적으로 혁신과 발전을 거듭해 왔으며 이제 PHP 언어를 사용하여 카메라를 호출하고 실시간 필터 효과를 추가하여 추가할 수 있습니다. 우리 사진에 더 많은 것 정말 재미있네요. 이 기사에서는 PHP를 사용하여 카메라를 호출하여 사진을 찍고 원하는 실시간 필터 효과를 추가하는 방법을 알려주는 빠른 시작 가이드를 제공합니다.

1. 필수 구성 요소 및 라이브러리 설치

먼저 이 기능을 구현하려면 몇 가지 필수 구성 요소와 라이브러리를 설치해야 합니다. 다음 구성 요소를 설치해야 합니다.

  1. PHP-GD 라이브러리: 필터 및 기타 이미지 처리 작업을 추가하는 데 사용할 수 있는 PHP 이미지 처리 라이브러리입니다.
  2. Video4Linux: Linux 시스템에 비디오 캡처 기능을 제공하는 인터페이스입니다.

다음 명령을 통해 Ubuntu 시스템에 이러한 구성 요소를 설치할 수 있습니다.

sudo apt-get install php-gd
sudo apt-get install v4l-utils

2. 카메라의 실시간 미리보기 페이지를 생성합니다

다음으로 실시간 미리보기를 표시할 PHP 페이지를 생성해야 합니다. 카메라의. 다음 코드를 사용하면 카메라의 실시간 이미지를 표시하는 간단한 페이지를 만들 수 있습니다.

<!DOCTYPE html>
<html>
<head>
    <title>Camera Preview</title>
</head>
<body>
    <h1>Camera Preview</h1>
    <img id="preview" src="" width="640" height="480" />
    <script>
        var videoElem = document.createElement('video');
        var canvasElem = document.createElement('canvas');
        var context = canvasElem.getContext('2d');

        navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
            videoElem.srcObject = stream;
            videoElem.play();

            setInterval(function() {
                context.drawImage(videoElem, 0, 0, canvasElem.width, canvasElem.height);
                var imgData = canvasElem.toDataURL('image/jpeg');
                document.getElementById('preview').src = imgData;
            }, 1000);
        }).catch(function(error) {
            console.log('Error: ' + error.message);
        });
    </script>
</body>
</html>

이 코드는 JavaScript의 getUserMedia API를 사용하여 카메라에 액세스하고 실시간 미리보기 이미지를 표시합니다. canvas 요소를 통해 캔버스에 실시간 이미지를 그리고, 이미지 데이터를 Base64 인코딩 형식의 URL로 변환하고, 미리보기 이미지를 표시하는 img 요소에 할당합니다.

3. 실시간 필터 효과 추가

이제 카메라의 실시간 미리보기 기능을 구현했습니다. 다음으로 이 페이지에 라이브 필터 효과를 추가하겠습니다. PHP-GD 라이브러리를 사용하여 이미지에 다양한 필터 효과를 추가할 수 있습니다.

먼저 필터 선택 상자를 추가하고 그 값을 PHP 코드에 전달해야 합니다. 위에서 생성한 미리보기 페이지를 수정하려면 다음 코드를 사용하세요.

<!DOCTYPE html>
<html>
<head>
    <title>Camera Preview with Filters</title>
</head>
<body>
    <h1>Camera Preview with Filters</h1>
    <img id="preview" src="" width="640" height="480" />
    <select id="filter">
        <option value="none">None</option>
        <option value="grayscale">Grayscale</option>
        <option value="sepia">Sepia</option>
        <option value="invert">Invert</option>
    </select>

    <script>
        // ... JavaScript code for camera preview ...

        document.getElementById('filter').addEventListener('change', function() {
            var filter = this.value;
            var imgData = canvasElem.toDataURL('image/jpeg');
            
            // Send imgData and filter to server-side PHP code for processing
        });
    </script>
</body>
</html>

필터 선택 상자로 선택 요소를 추가하고 JavaScript에 이벤트 리스너를 추가했습니다. 선택 상자의 값이 변경되면 선택한 필터는 값이 됩니다. ​및 이미지 데이터는 처리를 위해 서버측 PHP 코드로 전송됩니다.

이제 서버 측 PHP 코드에서 이 데이터를 수신하고 선택한 필터 값을 기반으로 이미지에 해당 효과를 추가해야 합니다. 다음 코드를 사용하여 필터 효과 처리를 위한 독립적인 PHP 파일을 만듭니다.

<?php
// Process the image based on the selected filter
if(isset($_POST['filter']) && isset($_POST['imgData'])) {
    $imgData = $_POST['imgData'];
    $filter = $_POST['filter'];
    
    // Create GD image resource from Base64 image data
    $imgResource = imagecreatefromstring(base64_decode(str_replace('data:image/jpeg;base64,', '', $imgData)));

    // Apply filters based on the selected option
    switch($filter) {
        case 'none':
            break;
        case 'grayscale':
            imagefilter($imgResource, IMG_FILTER_GRAYSCALE);
            break;
        case 'sepia':
            imagefilter($imgResource, IMG_FILTER_GRAYSCALE);
            imagefilter($imgResource, IMG_FILTER_COLORIZE, 90, 60, 40);
            break;
        case 'invert':
            imagefilter($imgResource, IMG_FILTER_NEGATE);
            break;
    }

    // Output the filtered image
    header('Content-Type: image/jpeg');
    imagejpeg($imgResource);

    // Clean up resources
    imagedestroy($imgResource);
}
?>

이 코드는 PHP-GD 라이브러리를 사용하여 수신된 필터 값을 기반으로 이미지에 해당 효과를 추가하고 처리된 이미지를 JPEG 형식으로 출력합니다.

마지막으로, 처리를 위해 이미지 데이터와 필터 옵션을 서버측 PHP 코드로 보내도록 이전 미리보기 페이지를 수정해야 합니다. 이전에 생성된 미리보기 페이지에서 JavaScript 코드를 수정하고 다음 코드로 바꿉니다.

// ... JavaScript code for camera preview ...

document.getElementById('filter').addEventListener('change', function() {
    var filter = this.value;
    var imgData = canvasElem.toDataURL('image/jpeg');
    
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'filter.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4 && xhr.status === 200) {
            document.getElementById('preview').src = 'data:image/jpeg;base64,' + xhr.responseText;
        }
    };

    var data = 'filter=' + encodeURIComponent(filter) + '&imgData=' + encodeURIComponent(imgData);
    xhr.send(data);
});

JavaScript의 XMLHttpRequest 객체를 통해 POST 요청을 보내 선택한 필터 값과 이미지 데이터를 서버측 PHP 코드로 전달하여 처리할 수 있습니다. . 그런 다음 서버에서 반환된 처리된 이미지의 Base64 인코딩 데이터를 기반으로 미리보기 이미지의 src 속성에 이를 할당합니다.

이제 브라우저에서 이 미리보기 페이지를 열고 다양한 필터 효과를 선택하여 실시간 미리보기 이미지의 변경 사항을 확인할 수 있습니다. 사진 버튼을 클릭하면 PHP 코드가 선택한 필터 효과를 이미지에 추가하여 출력합니다.

이 기사에서는 PHP를 사용하여 카메라를 호출하여 사진을 찍고 실시간 필터 효과를 추가하는 방법을 알려주는 간단하지만 기본적인 빠른 시작 가이드를 제공합니다. PHP-GD 라이브러리와 Video4Linux 인터페이스를 사용하면 이 기능을 더욱 확장 및 개선하고 사진에 더욱 창의적인 효과를 추가할 수 있습니다. 즐거운 코딩 되세요!

참고 자료:

  1. [PHP GD](https://www.php.net/manual/en/book.image.php)
  2. [Video4Linux](https://www.kernel.org /doc/html/v4.15/media/uapi/v4l/v4l2.html)

위 내용은 PHP는 카메라를 호출하여 사진을 찍고 실시간 필터를 추가합니다: 빠른 시작 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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