html2canvas로 이미지 생성
14554 단어 Vue.jshtml2canvas
나는 연애편지 같은 것을 하고 싶다.
러브레터에서 php 측면에서 이미지를 생성하고 출력합니다.
참고 자료
https://love-letter.club/
https://wood-roots.com/web/vue-js/2253
특징
PHP 측면
○ 사용자 환경에 의존하지 않음
서버 무거워짐
X 드로잉 문자는 사용할 수 없음(라이브러리에 강제로 넣으면 사용할 수 있음...사용자 측 드로잉 문자 업데이트에 따라 변경됨)
JS 측면에서 생성
○ 서버 무부하
○ 그림 문자 사용 가능
사용자 환경에 따라 오류 발생
환경이 분산되어 있어서 디버깅이 매우 힘들다
다만, 앞으로의 시대는 js로 만들고 싶다.
설치
α버전 설치 지정
npm install [email protected]
주의사항
·CSS에서 body는 글꼴을 설정하지 않습니다.
・ 버전은 알파판을 사용합니다.
npm updateα버전이 아니라stable이기 때문에 다시 넣어야 합니다.
・ 큰 모니터로 출력하면 유선으로 들어갑니다(이미지 스며들기)
어쩔 수 없는 일이라 포기했어요.
hoge.vue
<style>
#preview {
overflow: auto;
width: 100%;
}
#preview_inner {
background-size: 600px auto;
position: relative;
width: 600px;
}
#letter_body {
position: relative;
border-left: 17px solid #fbbfc8;
border-right: 17px solid #fbbfc8;
display: inline-block;
font-size: 1.5rem;
color: #444;
margin-top: -30px;
padding: 10px 10px 10px 10px !important;
min-width: 600px;
text-align: center;
height:200px;
display: table-cell; /* IE8から使用可能 */
vertical-align: middle;
white-space: pre-wrap;
}
</style>
<template>
<div>
<img v-if="imgData" :src="'/gcp-storage/' + imgData" style="width: 95%;">
<el-input type="textarea" v-model="message" :rows=5></el-input>
<el-button type="primary" @click="generate">画像を生成</el-button>
<div id="preview" style="display: block;">
<div id="preview_inner">
<div id="letter_top"><img src="/img/tegami-top.png"></div>
<div id="letter_body">--</div>
<div id="letter_bottom"><img src="/img/tegami-bottom.png"></div>
</div>
</div>
<div id="text_body">{{ message }}</div>
<h2>完成品</h2>
<div id="result"></div>
</div>
</template>
<script>
import html2canvas from 'html2canvas'//古いと、文字のサイズがずれるので、 vue.blade で 読みコンで使う
export default {
data() {
return {
imgData:'',
message:'',
};
},
created () {
this.message = 'つけめんそばざるうどん恋をした夜はすべてがうまくいきそうで。';
},
watch: {
},
methods: {
generate(){
//まずはテキスト部分だけ生成させる
let vc = this;
html2canvas(document.querySelector("#text_body"),{
scale: 2 //文字がぼやけないように
}).then(function(canvas){
//まずは一旦テキストを画像に
var letter_body = document.querySelector("#letter_body");
letter_body.innerHTML = '';
letter_body.appendChild(canvas);
vc.letterHeight = document.getElementById('letter_body').offsetHeight;
//その後、メイン画像として生成
html2canvas(document.querySelector("#preview_inner"),{
scale: 2
}).then(function(canvas){
var result = document.querySelector("#result");
result.innerHTML = '';
result.appendChild(canvas);
// document.getElementById('preview').style.display = "none";
// document.getElementById('result').style.display = "none";
// 以下、サーバーに送る処理
// var dataURI = canvas.toDataURL('image/png');
// let dataform = new FormData();
// //
// const message_tmp = document.getElementsByName("message");
// dataform.append('id',vc.$route.params.id);
// dataform.append('body',message_tmp[0].value);
// dataform.append('img',dataURI);
//
// //サーバー側に画像を保存
// axios.post('/hoge/makeGcpOnly/', dataform).then(e => {
//
// vc.imgData = e.data;
// vc.dialogVisible = false;
// vc.message = '';
// vc.loading = false;
//
// }).catch((error) => {
// console.log(error);
// console.log("エラー");
// });
});
});
}
}
};
</script>
이미지를 생성합니다.
Reference
이 문제에 관하여(html2canvas로 이미지 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ma7ma7pipipi/items/08461145731f1a09ce4a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
○ 사용자 환경에 의존하지 않음
서버 무거워짐
X 드로잉 문자는 사용할 수 없음(라이브러리에 강제로 넣으면 사용할 수 있음...사용자 측 드로잉 문자 업데이트에 따라 변경됨)
JS 측면에서 생성
○ 서버 무부하
○ 그림 문자 사용 가능
사용자 환경에 따라 오류 발생
환경이 분산되어 있어서 디버깅이 매우 힘들다
다만, 앞으로의 시대는 js로 만들고 싶다.
설치
α버전 설치 지정
npm install [email protected]
주의사항
·CSS에서 body는 글꼴을 설정하지 않습니다.
・ 버전은 알파판을 사용합니다.
npm updateα버전이 아니라stable이기 때문에 다시 넣어야 합니다.
・ 큰 모니터로 출력하면 유선으로 들어갑니다(이미지 스며들기)
어쩔 수 없는 일이라 포기했어요.
hoge.vue
<style>
#preview {
overflow: auto;
width: 100%;
}
#preview_inner {
background-size: 600px auto;
position: relative;
width: 600px;
}
#letter_body {
position: relative;
border-left: 17px solid #fbbfc8;
border-right: 17px solid #fbbfc8;
display: inline-block;
font-size: 1.5rem;
color: #444;
margin-top: -30px;
padding: 10px 10px 10px 10px !important;
min-width: 600px;
text-align: center;
height:200px;
display: table-cell; /* IE8から使用可能 */
vertical-align: middle;
white-space: pre-wrap;
}
</style>
<template>
<div>
<img v-if="imgData" :src="'/gcp-storage/' + imgData" style="width: 95%;">
<el-input type="textarea" v-model="message" :rows=5></el-input>
<el-button type="primary" @click="generate">画像を生成</el-button>
<div id="preview" style="display: block;">
<div id="preview_inner">
<div id="letter_top"><img src="/img/tegami-top.png"></div>
<div id="letter_body">--</div>
<div id="letter_bottom"><img src="/img/tegami-bottom.png"></div>
</div>
</div>
<div id="text_body">{{ message }}</div>
<h2>完成品</h2>
<div id="result"></div>
</div>
</template>
<script>
import html2canvas from 'html2canvas'//古いと、文字のサイズがずれるので、 vue.blade で 読みコンで使う
export default {
data() {
return {
imgData:'',
message:'',
};
},
created () {
this.message = 'つけめんそばざるうどん恋をした夜はすべてがうまくいきそうで。';
},
watch: {
},
methods: {
generate(){
//まずはテキスト部分だけ生成させる
let vc = this;
html2canvas(document.querySelector("#text_body"),{
scale: 2 //文字がぼやけないように
}).then(function(canvas){
//まずは一旦テキストを画像に
var letter_body = document.querySelector("#letter_body");
letter_body.innerHTML = '';
letter_body.appendChild(canvas);
vc.letterHeight = document.getElementById('letter_body').offsetHeight;
//その後、メイン画像として生成
html2canvas(document.querySelector("#preview_inner"),{
scale: 2
}).then(function(canvas){
var result = document.querySelector("#result");
result.innerHTML = '';
result.appendChild(canvas);
// document.getElementById('preview').style.display = "none";
// document.getElementById('result').style.display = "none";
// 以下、サーバーに送る処理
// var dataURI = canvas.toDataURL('image/png');
// let dataform = new FormData();
// //
// const message_tmp = document.getElementsByName("message");
// dataform.append('id',vc.$route.params.id);
// dataform.append('body',message_tmp[0].value);
// dataform.append('img',dataURI);
//
// //サーバー側に画像を保存
// axios.post('/hoge/makeGcpOnly/', dataform).then(e => {
//
// vc.imgData = e.data;
// vc.dialogVisible = false;
// vc.message = '';
// vc.loading = false;
//
// }).catch((error) => {
// console.log(error);
// console.log("エラー");
// });
});
});
}
}
};
</script>
이미지를 생성합니다.
Reference
이 문제에 관하여(html2canvas로 이미지 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ma7ma7pipipi/items/08461145731f1a09ce4a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
α버전 설치 지정
npm install [email protected]
주의사항
·CSS에서 body는 글꼴을 설정하지 않습니다.
・ 버전은 알파판을 사용합니다.
npm updateα버전이 아니라stable이기 때문에 다시 넣어야 합니다.
・ 큰 모니터로 출력하면 유선으로 들어갑니다(이미지 스며들기)
어쩔 수 없는 일이라 포기했어요.
hoge.vue
<style>
#preview {
overflow: auto;
width: 100%;
}
#preview_inner {
background-size: 600px auto;
position: relative;
width: 600px;
}
#letter_body {
position: relative;
border-left: 17px solid #fbbfc8;
border-right: 17px solid #fbbfc8;
display: inline-block;
font-size: 1.5rem;
color: #444;
margin-top: -30px;
padding: 10px 10px 10px 10px !important;
min-width: 600px;
text-align: center;
height:200px;
display: table-cell; /* IE8から使用可能 */
vertical-align: middle;
white-space: pre-wrap;
}
</style>
<template>
<div>
<img v-if="imgData" :src="'/gcp-storage/' + imgData" style="width: 95%;">
<el-input type="textarea" v-model="message" :rows=5></el-input>
<el-button type="primary" @click="generate">画像を生成</el-button>
<div id="preview" style="display: block;">
<div id="preview_inner">
<div id="letter_top"><img src="/img/tegami-top.png"></div>
<div id="letter_body">--</div>
<div id="letter_bottom"><img src="/img/tegami-bottom.png"></div>
</div>
</div>
<div id="text_body">{{ message }}</div>
<h2>完成品</h2>
<div id="result"></div>
</div>
</template>
<script>
import html2canvas from 'html2canvas'//古いと、文字のサイズがずれるので、 vue.blade で 読みコンで使う
export default {
data() {
return {
imgData:'',
message:'',
};
},
created () {
this.message = 'つけめんそばざるうどん恋をした夜はすべてがうまくいきそうで。';
},
watch: {
},
methods: {
generate(){
//まずはテキスト部分だけ生成させる
let vc = this;
html2canvas(document.querySelector("#text_body"),{
scale: 2 //文字がぼやけないように
}).then(function(canvas){
//まずは一旦テキストを画像に
var letter_body = document.querySelector("#letter_body");
letter_body.innerHTML = '';
letter_body.appendChild(canvas);
vc.letterHeight = document.getElementById('letter_body').offsetHeight;
//その後、メイン画像として生成
html2canvas(document.querySelector("#preview_inner"),{
scale: 2
}).then(function(canvas){
var result = document.querySelector("#result");
result.innerHTML = '';
result.appendChild(canvas);
// document.getElementById('preview').style.display = "none";
// document.getElementById('result').style.display = "none";
// 以下、サーバーに送る処理
// var dataURI = canvas.toDataURL('image/png');
// let dataform = new FormData();
// //
// const message_tmp = document.getElementsByName("message");
// dataform.append('id',vc.$route.params.id);
// dataform.append('body',message_tmp[0].value);
// dataform.append('img',dataURI);
//
// //サーバー側に画像を保存
// axios.post('/hoge/makeGcpOnly/', dataform).then(e => {
//
// vc.imgData = e.data;
// vc.dialogVisible = false;
// vc.message = '';
// vc.loading = false;
//
// }).catch((error) => {
// console.log(error);
// console.log("エラー");
// });
});
});
}
}
};
</script>
이미지를 생성합니다.
Reference
이 문제에 관하여(html2canvas로 이미지 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ma7ma7pipipi/items/08461145731f1a09ce4a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<style>
#preview {
overflow: auto;
width: 100%;
}
#preview_inner {
background-size: 600px auto;
position: relative;
width: 600px;
}
#letter_body {
position: relative;
border-left: 17px solid #fbbfc8;
border-right: 17px solid #fbbfc8;
display: inline-block;
font-size: 1.5rem;
color: #444;
margin-top: -30px;
padding: 10px 10px 10px 10px !important;
min-width: 600px;
text-align: center;
height:200px;
display: table-cell; /* IE8から使用可能 */
vertical-align: middle;
white-space: pre-wrap;
}
</style>
<template>
<div>
<img v-if="imgData" :src="'/gcp-storage/' + imgData" style="width: 95%;">
<el-input type="textarea" v-model="message" :rows=5></el-input>
<el-button type="primary" @click="generate">画像を生成</el-button>
<div id="preview" style="display: block;">
<div id="preview_inner">
<div id="letter_top"><img src="/img/tegami-top.png"></div>
<div id="letter_body">--</div>
<div id="letter_bottom"><img src="/img/tegami-bottom.png"></div>
</div>
</div>
<div id="text_body">{{ message }}</div>
<h2>完成品</h2>
<div id="result"></div>
</div>
</template>
<script>
import html2canvas from 'html2canvas'//古いと、文字のサイズがずれるので、 vue.blade で 読みコンで使う
export default {
data() {
return {
imgData:'',
message:'',
};
},
created () {
this.message = 'つけめんそばざるうどん恋をした夜はすべてがうまくいきそうで。';
},
watch: {
},
methods: {
generate(){
//まずはテキスト部分だけ生成させる
let vc = this;
html2canvas(document.querySelector("#text_body"),{
scale: 2 //文字がぼやけないように
}).then(function(canvas){
//まずは一旦テキストを画像に
var letter_body = document.querySelector("#letter_body");
letter_body.innerHTML = '';
letter_body.appendChild(canvas);
vc.letterHeight = document.getElementById('letter_body').offsetHeight;
//その後、メイン画像として生成
html2canvas(document.querySelector("#preview_inner"),{
scale: 2
}).then(function(canvas){
var result = document.querySelector("#result");
result.innerHTML = '';
result.appendChild(canvas);
// document.getElementById('preview').style.display = "none";
// document.getElementById('result').style.display = "none";
// 以下、サーバーに送る処理
// var dataURI = canvas.toDataURL('image/png');
// let dataform = new FormData();
// //
// const message_tmp = document.getElementsByName("message");
// dataform.append('id',vc.$route.params.id);
// dataform.append('body',message_tmp[0].value);
// dataform.append('img',dataURI);
//
// //サーバー側に画像を保存
// axios.post('/hoge/makeGcpOnly/', dataform).then(e => {
//
// vc.imgData = e.data;
// vc.dialogVisible = false;
// vc.message = '';
// vc.loading = false;
//
// }).catch((error) => {
// console.log(error);
// console.log("エラー");
// });
});
});
}
}
};
</script>
Reference
이 문제에 관하여(html2canvas로 이미지 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ma7ma7pipipi/items/08461145731f1a09ce4a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)