TL; DR;
Bir resmi (çoğunlukla jpeg, png ve gif) yüklemeden önce doğrudan tarayıcı tarafında sıkıştırmanın bir yolu var mı? JavaScript'in bunu yapabileceğinden oldukça eminim, ancak bunu başarmanın bir yolunu bulamıyorum.
İşte uygulamak istediğim tam senaryo:
- kullanıcı web siteme gider ve bir
input type="file"
öğe aracılığıyla bir resim seçer , - bu görüntü JavaScript aracılığıyla alınır, doğru dosya biçimi, maksimum dosya boyutu vb. gibi bazı doğrulamalar yaparız,
- her şey yolundaysa, sayfada resmin bir önizlemesi görüntülenir,
- kullanıcı, resmi 90 ° / -90 ° döndürmek, önceden tanımlanmış bir orana göre kırpmak gibi bazı temel işlemleri yapabilir veya kullanıcı başka bir resim yükleyip 1. adıma geri dönebilir,
- kullanıcı memnun kaldığında, düzenlenen görüntü daha sonra sıkıştırılır ve yerel olarak "kaydedilir" (bir dosyaya kaydedilmez, ancak tarayıcı belleğine / sayfaya kaydedilir), -
- kullanıcı adı, yaşı vb. verilerle bir formu doldurur,
- kullanıcı "Bitir" düğmesine tıklar, ardından verileri + sıkıştırılmış resmi içeren form sunucuya gönderilir (AJAX olmadan),
Son adıma kadar olan tüm süreç istemci tarafında yapılmalı ve en son Chrome ve Firefox, Safari 5+ ve IE 8+ ile uyumlu olmalıdır . Mümkünse, yalnızca JavaScript kullanılmalıdır (ancak bunun mümkün olmadığından oldukça eminim).
Şu anda hiçbir şeyi kodlamadım, ama bunu zaten düşündüm. Dosya API'si aracılığıyla yerel olarak dosya okumak mümkündür , görüntü önizleme ve düzenleme Canvas öğesi kullanılarak yapılabilir , ancak görüntü sıkıştırma bölümünü yapmanın bir yolunu bulamıyorum .
Göre html5please.com ve caniuse.com , bu tarayıcıyı desteklemesini oldukça zor (IE) için teşekkürler, ancak olarak polyfill böyle kullanılarak yapılabilir FlashCanvas ve FileReader .
Aslında amaç dosya boyutunu küçültmek, dolayısıyla görüntü sıkıştırmayı bir çözüm olarak görüyorum. Ancak, yüklenen görüntülerin web sitemde her seferinde aynı yerde gösterileceğini biliyorum ve bu görüntüleme alanının boyutunu biliyorum (örn. 200x400). Böylece, görüntüyü bu boyutlara uyacak şekilde yeniden boyutlandırabilir ve böylece dosya boyutunu azaltabilirim. Bu teknik için sıkıştırma oranının ne olacağı hakkında hiçbir fikrim yok.
Ne düşünüyorsun ? Bana söylemen gereken herhangi bir tavsiyen var mı? JavaScript'te bir görüntü tarayıcı tarafını sıkıştırmanın herhangi bir yolunu biliyor musunuz? Cevaplarınız için teşekkürler.