Heim > Web-Frontend > H5-Tutorial > Hauptteil

So rufen Sie die Kamera auf, um Bilder aufzunehmen und Bilder in H5 zu komprimieren

php中世界最好的语言
Freigeben: 2018-01-12 09:22:36
Original
2808 Leute haben es durchsucht

Dieses Mal zeige ich Ihnen, wie Sie mit H5 die Kamera aufrufen, um Bilder aufzunehmen und zu komprimieren Bilder. Wie können Sie mit H5 die Kamera aufrufen, um Bilder aufzunehmen und Bilder zu komprimieren? Was sind die Vorsichtsmaßnahmen , damit H5 die Kamera zum Aufnehmen von Bildern und zum Komprimieren der Bilder aufruft? Das Folgende ist ein praktischer Fall, schauen wir uns das an.

Ordnen Sie die Dokumente, suchen Sie nach einem Beispielcode für H5, der die Kamera zum Aufnehmen von Bildern aufruft, und komprimieren Sie die Bilder, sortieren Sie ihn und optimieren Sie ihn ein wenig für die Weitergabe.

Hintergrund

Ich habe kürzlich eine h5-Seite erstellt. Die Hauptfunktion besteht darin, die Kamera aufzurufen, um Bilder aufzunehmen oder Bilder aus dem Album auszuwählen und die Fotos auf Base64 zu komprimieren und dann hochzuladen an den Backend-Server. Der Server sendet dann die Erkennungsergebnisse zurück.

Die Hauptfunktionspunkte des Frontends sind:

Wie man die Kamera in H5 aufruft

Wie man Bilder komprimiert

Bilder in Base64 konvertieren

H5 zum Aufrufen der Kamera/Album

Der einfachste Weg, die Kamera aufzurufen, ist die Verwendung des Eingabeattributs Datei[Kamera]:

<input type="file" capture=camera accept="image/*">//相机
<input type="file" accept="image/*">//相册
Nach dem Login kopieren

Diese Methode ist weiterhin kompatibel Probleme Sie können die Kamera auf einem iPhone normal öffnen, aber nach dem Klicken auf einem Android-Telefon stehen Ihnen gemischte Optionen wie Kamera, Galerie, Dateimanager usw. zur Verfügung. Ich habe viel im Internet gesucht, aber keine gute Lösung gefunden, sodass ich nur weiter schreiben kann. . .

Bildkomprimierung

Bildkomprimierung erfordert FileReader und .

Das FileReader-Objekt ermöglicht es Webanwendungen, den Inhalt von auf dem Computer gespeicherten Dateien asynchron zu lesen, indem ein File- oder Blob-Objekt verwendet wird, um die zu lesende Datei oder die zu lesenden Daten anzugeben.

ist ein HTML-Element, in dem Grafiken mithilfe von Skripten gezeichnet und einfache Animationen gezeichnet werden können.

Bildkomprimierung erfordert eine Komprimierung der Auflösung und Qualität des Bildes. Für die Auflösungskomprimierung stelle ich die maximale Seite des Bildes auf 800 ein und die andere Seite wird entsprechend dem Originalverhältnis des Bildes skaliert Legen Sie außerdem das Gesamtskalierungsverhältnis des Bildes fest.

var MAX_WH=800;
var image=new Image();
image.onload=function () {
  if(image.height > MAX_WH) {
    // 宽度等比例缩放 *=
    image.width *= MAX_WH/ image.height;
    image.height = MAX_WH;
  }
  if(image.width > MAX_WH) {
    // 宽度等比例缩放 *=
    image.height *= MAX_WH/ image.width;
    image.width = MAX_WH;
  }
}
image.src=dataURL;//dataURL通过FileReader获取
Nach dem Login kopieren

Dann ist da noch die Qualität des komprimierten Bildes. Die Komprimierung ist hier auf 80 % eingestellt. Wenn die Einstellung zu klein ist, wird das Bild verzerrt. Erstellen Sie dynamisch das -Tag und komprimieren Sie dann das Bild:

var quality=80;
var cvs = document.createElement(&#39;canvas&#39;);
cvs.width = image.width;
cvs.heigh = image.height;
var context=cvs.getContext("2d");
context.drawImage(image, 0, 0,image.width, image.height);
dataURL = cvs.toDataURL(&#39;image/jpeg&#39;, quality/100);
Nach dem Login kopieren

Laden Sie es dann auf den Server hoch und zeigen Sie das Serverergebnis an. . . Beim Aufnehmen von Bildern auf einem iOS-Telefon wird das Bild aus unerklärlichen Gründen gedreht. Beheben Sie das Problem weiter.

Lösung der IOS-Bildrotation

Zitat zuerst exif.js und erhalten Sie die Fotorichtungsinformationen über EXIF.getData und EXIF.getTag.

//file通过input标签获取
EXIF.getData(file,function(){
  orientation=EXIF.getTag(file,&#39;Orientation&#39;);
});
Nach dem Login kopieren

Nachdem Sie die Richtungsinformationen des Bildes erhalten haben, führen Sie den entsprechenden Rotationsvorgang entsprechend dem erhaltenen Wert durch.

switch (orientation) {
  case 6:
  case 8:
    cvs.width = height;
    cvs.height = width;
    break;
}
var context=cvs.getContext("2d");
switch(orientation){
  //iphone横屏拍摄,此时home键在左侧
  case 3:
  // 180度向左旋转
  context.translate(width, height);
  context.rotate(Math.PI);
  break;
  //iphone竖屏拍摄,此时home键在下方(正常拿手机的方向)
  case 6:
  context.rotate(0.5 * Math.PI);
  context.translate(0, -height);
  break;
  //iphone竖屏拍摄,此时home键在上方
  case 8:
  // 逆时针旋转90度
  context.rotate(-0.5 * Math.PI);
  context.translate(-width, 0);
  break;
}
Nach dem Login kopieren

Ich glaube, dass Sie die Methoden beherrschen, nachdem Sie diese Fälle gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

So implementieren Sie das Scannen von H5-Handys

So starten Sie einen farbenfrohen Ring-Countdown mit SVG

So führen Sie domänenübergreifende Kommunikation in HTML5 durch

Das obige ist der detaillierte Inhalt vonSo rufen Sie die Kamera auf, um Bilder aufzunehmen und Bilder in H5 zu komprimieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!