웹으로 만드는 카메라 앱
제목
졸작 향수 사진 필터를 웹 앱으로 만듭니다.
벌써 9년 전이군요-그리운.
※앱은 배포를 종료하고 있습니다.
출처
여기 있습니다.
htps : // 기주 b. 코 m / 미우라 333 / s s ぃ l rp 2
개발 환경
품목
내용
비고
서버
롤리팝
고유 도메인 획득, 무료 SSL
언어
PHP7.1
프레임워크
Laravel 5.7.13
DB
사용하지 않고
이미지 처리 라이브러리
GD
검증 터미널
iOS12.0.3, 11.3
롤리포 환경에 Laravel 넣어 동작시키고 있습니다.
전혀 프레임 워크의 장점을 활용하지 못해 죄송합니다.
전제 조건
여기 있습니다.
htps : // 기주 b. 코 m / 미우라 333 / s s ぃ l rp 2
개발 환경
품목
내용
비고
서버
롤리팝
고유 도메인 획득, 무료 SSL
언어
PHP7.1
프레임워크
Laravel 5.7.13
DB
사용하지 않고
이미지 처리 라이브러리
GD
검증 터미널
iOS12.0.3, 11.3
롤리포 환경에 Laravel 넣어 동작시키고 있습니다.
전혀 프레임 워크의 장점을 활용하지 못해 죄송합니다.
전제 조건
해설
카메라에서 이미지 획득
manifest.json
{
"name": "nosfilter-pwa",
"short_name": "nosFilter",
"background_color": "#ffffff",
"icons": [{
"src": "./icon-152.png",
"sizes": "152x152",
"type": "image/png"
},{
"src": "./icon-120.png",
"sizes": "120x120",
"type": "image/png"
}],
"start_url": "./?utm_source=homescreen",
"display": "browser",
"theme_color": "#f7f7f7"
}
index.blade.php
<body class="cameraBody">
<video id="video" autoplay playsinline></video>
<div class="cameraSpacer"></div>
<div class="cameraButtonParent">
<div class="cameraButtonParent2">
<input id="btnPicture" type="button" disabled="true" value="OK" class="cameraBtn"></input>
</div>
</div>
<canvas id="imageCanvas" style="display:none;" width="300" height="300"></canvas>
{!! Form::open(['url' => '/result', 'id' => 'formResult']) !!}
{!! Form::hidden('imageData', null, ['id' => 'imagePost']) !!}
{!! Form::close() !!}
<script>
const medias = {audio : false, video : {
facingMode : {
exact : "environment" // リアカメラにアクセス
}
}},
video = document.getElementById("video");
navigator.getUserMedia(medias, successCallback, errorCallback);
var width = 0, height = 0;
video.addEventListener( "loadedmetadata", function (e) {
width = this.videoWidth;
height = this.videoHeight;
}, false );
function successCallback(stream) {
video.srcObject = stream;
var button = document.getElementById("btnPicture");
var canvas = document.getElementById("imageCanvas");
button.disabled = false;
button.onclick = function() {
canvas.width = width;
canvas.height = height;
canvas.getContext("2d").drawImage(video, 0, 0, width, height, 0, 0, width, height);
var img = canvas.toDataURL("image/jpeg");
$('#imagePost').val(img);
$('#formResult').submit();
};
};
function errorCallback(err) {
alert(err);
};
</script>
</body>
이미지 처리
다음은 소스의 일부, 그레이 스케일 화하고 있는 개소의 발췌입니다.
imageController.php
$img = str_replace('data:image/jpeg;base64,', '', $request->imageData);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$timestamp = time();
$file = $timestamp . ".jpeg";
Storage::disk('local')->put('public/'.$file, $data);
$storagePath = asset('storage/');
Log::debug($storagePath);
$src = imagecreatefromjpeg('storage/'.$file);
$imageWidth = imagesx($src);
$imageHeight = imagesy($src);
$grayImage = imagecreatetruecolor($imageWidth, $imageHeight);
for($i = 0; $i < $imageWidth; $i++){
for($j = 0; $j < $imageHeight; $j++){
//get pixel
$rgb = imagecolorat ($src, $i, $j);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$gray = ($r*0.125)+($g*0.25)+($b*0.0625);
$dstColor = imagecolorallocate($grayImage, $gray, $gray, $gray);
imagesetpixel($grayImage, $i,$j, $dstColor);
}
}
이미지 데이터 생성
imageController.php
imagejpeg($resultImage, 'storage/'.$fileOut, 80);
$dataOut = file_get_contents('storage/'.$fileOut);
$imageData64 = base64_encode($dataOut);
unlink('storage/'.$fileOut);
return view('result')->with(['imageData' => 'data:image/jpeg;base64,'.$imageData64, 'width' => $imageWidth, 'height' => $imageHeight]);
할 수 있었다
감상
참고
htps : // 코 m / 우마 미치 / ms / 0 2b4b1c578 7335 ba 20
htps : // m / mu_mumo / / ms / d35d b580 a 561c562 또는 6
h tp // 기미즈카. 하테나 bぉg. 코m/엔트리/2017/11/06/140337
Reference
이 문제에 관하여(웹으로 만드는 카메라 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hellscare/items/3e5793dd0ab8b6c196dd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(웹으로 만드는 카메라 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hellscare/items/3e5793dd0ab8b6c196dd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)