Home > Web Front-end > H5 Tutorial > body text

Share a mobile project using canvas to synthesize poster images

零下一度
Release: 2017-06-30 15:26:43
Original
6646 people have browsed it

I recently made a mobile project that uses canvas to synthesize poster images. Since I don’t have any canvas foundation, I searched the Internet for a demo from a senior, but I encountered many problems during the development process. The problems encountered and the solutions are summarized as follows:

1. The problem of adapting the mobile canvas project to full screen

Problem description: Since the width and height of the canvas can only be set to px values ​​and do not support rem units, it is difficult to achieve the effect of the canvas filling the full screen when the screen resolution of the mobile device is complex.

Solution: Get the clientWidth value of the mobile phone screen through js and assign it to the canvas to achieve the effect of adapting to the full screen;

var clientWidth = document.documentElement.clientWidth;
var canvasWidth = Math.floor(clientWidth);
var canvasHeight = Math.floor(clientWidth*(1334/750));
$("#main").css('width',canvasWidth+'px');
$("#main").css('height',canvasHeight+'px');
Copy after login

2. The images synthesized by canvas are blurry.

Problem description: The images generated by canvas are blurry, especially when there are QR codes on the images that need to be identified. Well, users cannot identify;

Solution: 1) You can quote HIDPI-CANVAS.JS plug-in solving this problem;

2) You can also make the Width and Height values ​​in the style of Canvas's style of Canvas. Set it to the size you want, and then enlarge the width and height values ​​of the canvas by x times respectively. Note here that when you draw pictures or text in the canvas, the corresponding values ​​​​should also be enlarged by x times.

3. When compositing pictures, the pictures of some models are confusing

Problem description: Some Android phones are exporting canvas When using base64 images, only half of the image with the desired effect can be displayed. Preliminary analysis indicates that it is a bug caused by the device pixel ratio.

Solution: Get the device pixel ratio pr and determine the model. Here I only determined whether it is an iPhone or an Android. There is no problem yet. When compositing the picture, restore the width and height values ​​to the original size. .

//hidpi-canvas将canvas的width和height属性放大pr倍
if (navigator.userAgent.match(/iphone/i)) {
    canvas.width = width ;//恢复为原先的大小
    canvas.height = height ;
}else{
    canvas.width = width / pr;//恢复为原先的大小
    canvas.height = height / pr;
}
Copy after login

4. There is a rotation problem when uploading pictures on iPhone

Problem description: Test When I discovered that photos uploaded to iPhones were rotated, this problem did not occur when uploading pictures saved from the Internet. Android devices were normal.

Solution: This problem can be solved using the exif.js plug-in. This plug-in will obtain the angle and other information when the photo was taken, mainly the Orientation attribute, so as to perform corresponding operations;

 

var file = $(this)[0].files[0];
EXIF.getData(file, function() {  
    EXIF.getAllTags(this);     
    Orientation = EXIF.getTag(this, 'Orientation');  
});
Copy after login

5. Canvas drawing cross-domain images cannot export base64 images

Problem description : When there are images from cross-domain requests in the canvas, exporting base64 images fails. Preliminary analysis should be caused by the security mechanism of the canvas itself.

Solution: This bug needs to be solved by the front-end and back-end cooperation. First, set the image on the back-end to allow cross-domain, and then set Img.crossOrigin = "Anonymous"; on the front-end.

var pageqrcodeimg = qrcodecanvas.toDataURL('image/jpg');
var qrcodeImg = new Image();
qrcodeImg.crossOrigin = "Anonymous"; 
qrcodeImg.src = pageqrcodeimg;
qrcodeImg.onload=function(){
        //绘制图片
}
Copy after login

6. A white screen will appear when drawing pictures on canvas

Problem description : When drawing pictures on canvas, a white screen may occasionally appear. Preliminary analysis is that the drawing operation is performed before the picture is read.

Solution: Add the onload function to img, and then perform the drawing operation after the image is read.

qrcodeImg.onload=function(){
        //绘制图片
}
Copy after login

7. Long press on the picture while browsing on WeChat cannot be saved

Problem description : Pictures generated through canvas cannot be saved or the QR code can be recognized when long-pressed in the WeChat browser. This happens to some pictures on Android but normal on iPhone. Preliminary analysis is that the picture quality is too high.

Solution: Compress image quality when exporting base64 images.

var mycanvas = document.getElementById("main");
var image = mycanvas.toDataURL("image/jpeg",0.7);
Copy after login

Postscript: These are basically the problems encountered so far. If any problems are encountered in the future, we will continue to update.

The above is the detailed content of Share a mobile project using canvas to synthesize poster images. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!