Stackoverflow'ta yeni bir site var. Ben kırpılmış bir görüntü sunucu üzerinde bir .jpg dosyası olarak jcrop kullanarak kaydedebileceğiniz bir çözüm üzerinde çalışıyorum. Görüntü, bir küp yüzeyinde de doku olarak kullanılır (bunun için üç.js kullanıyorum). Profesyonel bir kodlayıcı değilim, ancak resmi yüzeyden almayı ve sunucuya kaydetmeyi başardım.Sunucuyu bir jpg dosyası olarak kaydederken DPI nasıl yükseltilir?
AMA, maalesef dosyalar her zaman 96 DPI çözünürlüğe sahip ve düşük kaliteye sahip (2000px X 2000px çözünürlükte bile olsa). Bir çözüm bulmaya çalıştım ve daha güncel bir şey bulmayı umuyordum. Örneğin, toDataURLHD
yöntemini duydum. Denedim ama işe yaramadı.
function saveIt(){
var data_image_1=$('#img_front1_CANVAS_PREVIEW')[0].toDataURL('image/jpeg');
var postData = "canvasData="+data_image_1;
var ajax = new XMLHttpRequest();
ajax.open("POST",'upload.php',true);
ajax.setRequestHeader('Content-Type', 'canvas/upload');
ajax.onreadystatechange=function()
{
if (ajax.readyState == 4)
{alert("image saved");}
}
ajax.send(postData);
}
Ve PHP kısmı:: İşte
benim sunucu yükleme için JavaScript kodudur kod çalışırif (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
$rawImage=$GLOBALS['HTTP_RAW_POST_DATA'];
$removeHeaders=substr($rawImage, strpos($rawImage, ",")+1);
$decode=base64_decode($removeHeaders);
$fopen = fopen('uploads/myImage.jpg', 'wb');
fwrite($fopen, $decode);
fclose($fopen);
}
, sunucuda görüntü elde ancak kalitesi kötü :
Daha fazla dpi almanın bir yolu var mı?
DÜZENLEME:
Kodum ben harici kaynakları kullanılan beri biraz karmaşık. Tuval etiketi, örneğin "gizli" idi. Burada ayrıca yükleme prosedürünün bazı kodları.
HTML:
<!--Upload Button-->
<img class="email-avatar" id="img_front1" height="64" width="64" src="img.png">
<!--Opens a popup, where the picture is being cropped-->
<div id="popup" class="popup">
<img src="" id="target" alt="Flowers" />
<button onclick="javascript:$.modal.close();" class="pure-button primary-button" id="Ready">Ready</button>
</div>
<!--After the cropping this function is called-->
<script>
// icon image search
jQuery(document).ready(function($){
Iconcontroller('img_front1',2000,2000,0);
});
</script>
Yani burada
herhangi tuval etiketleri bulamadık. Ama biliyorum, oluşturuldu ve "Iconcontroller" işlevi içinde bir .js dosyasında buldum.
EDIT2:
ben bunu değiştirmesi gerektiğini parçasını buldum. canvas.width=img.width*300/96
yöntemini denedim, ancak bir şey çalışmıyor. Belki de buradaki kod doğru yerde değil.
Tüm kod burada. RESIZING AND UPLOAD
ve update image canvas
parça sonra bak:
Javascript: Bazı kütüphanelerine olmadığından
function Iconcontroller(OBJ_ICON_ID,SIZE_W,SIZE_H,SIZES_WH,FUNCTIONCALLBACK){
// CONSTANTS AUX
var NAME_OBJECT_CONTROL=OBJ_ICON_ID;
var NAME_FILE_INPUT=NAME_OBJECT_CONTROL+'_FILES_INPUT';
var NAME_PREVIEW_CANVAS=NAME_OBJECT_CONTROL+'_CANVAS_PREVIEW';
var NAME_TARGET_IMG='target';
var NAME_POPUP_HTML='popup';
var SIZE_W=SIZE_W;
var SIZE_H=SIZE_H;
var SIZES_WH=SIZES_WH;
$("#"+NAME_OBJECT_CONTROL).after('<input name="'+NAME_FILE_INPUT+'" style="display:none" id="'+NAME_FILE_INPUT+'" type="file" accept="image/jpeg,image/png,image/gif" />');
$("#"+NAME_OBJECT_CONTROL).after('<canvas id="'+NAME_PREVIEW_CANVAS+'" style="display:none"></canvas>');
$('#'+NAME_OBJECT_CONTROL).click(
function(){
$('#'+NAME_FILE_INPUT).val("");
$('#'+NAME_FILE_INPUT).click();
});
$('#'+NAME_FILE_INPUT).change(function(e) {
var file = e.target.files[0];
ProcessImage(file,NAME_PREVIEW_CANVAS,NAME_TARGET_IMG,NAME_POPUP_HTML,SIZE_W,SIZE_H,SIZES_WH,FUNCTIONCALLBACK);
});
}
function modal(NAME_POPUP_HTML){
$("#"+NAME_POPUP_HTML).modal({escapeClose: true,clickClose: true,showClose: true});
}
//PROCESS AND RESIZE FUNCTION
function ProcessImage(file,NAME_PREVIEW_CANVAS,NAME_TARGET_IMG,NAME_POPUP_HTML,SIZE_W,SIZE_H,SIZES_WH,FUNCTIONCALLBACK){
var NAME_PREVIEW_CANVAS=NAME_PREVIEW_CANVAS;
var NAME_TARGET_IMG=NAME_TARGET_IMG;
var NAME_POPUP_HTML=NAME_POPUP_HTML;
var SIZE_W=SIZE_W;
var SIZE_H=SIZE_H;
//RESIZING AND UPLOAD
canvasResize(file, {
width: 710,
height: 470,
crop: false,
quality:100,
rotate: 0,
callback: function(data, width, height) {
// resizing img
var span = $('#'+NAME_TARGET_IMG).attr('src',data);
// detect crop
jcrop_obj= $('#'+NAME_TARGET_IMG).data('Jcrop');
// show popup
$("#"+NAME_POPUP_HTML).modal({
escapeClose: true,
clickClose: true,
showClose: true
});
// si existe para cambiar el crop
if (jcrop_obj != null) {$('#'+NAME_TARGET_IMG).data('Jcrop').destroy()}
if(SIZES_WH!=1){SIZES_WH=SIZE_W /SIZE_H;}
else{SIZES_WH=0;}
// crea el jcrop for image
$('#'+NAME_TARGET_IMG).Jcrop({
aspectRatio: SIZES_WH,
onChange : updatePreview,
onSelect : updatePreview,
setSelect: [ 0, 0, SIZE_W, SIZE_H]
});
// update image canvas
function updatePreview(c) {
if(parseInt(c.w) > 0) {
var imageObj = $("#"+NAME_TARGET_IMG)[0];
// Show image preview
var canvas = $("#"+NAME_PREVIEW_CANVAS)[0];
canvas.width = SIZE_W*300/96;
canvas.height = SIZE_H*300/96;
var context = canvas.getContext("2d");
context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0, SIZE_W*300/96, SIZE_H*300/96);
}
if(FUNCTIONCALLBACK){FUNCTIONCALLBACK();}
};
}
});
}
Ben de, kodları ile bir ZIP dosyası oluşturdu. Here is the link.
EDIT3:
Marke gelen cevabı nereye gittiğini biliyorum, ama yine de vermeyin. Çözüm güzeldi, umarım bunu koduma uygulayacağım. Çabalarınız için teşekkür ederim, gerçekten takdir ediyorum, çünkü burada yeniyim ve herhangi bir cevap almayı beklemiyordum bile. :)
Yapmanız gereken şey, orijinal görüntüyü herhangi bir değişiklik yapmadan yüklemek, böylece kaliteyi kaybetmemek veya istenmeyen eserler tanıtmaktır. Resmi yeniden boyutlandırmak, farklı donanım ve tarayıcı yapılandırmaları için farklılıklar yaratacaktır. Görüntü kalitesini artıramazsınız, eğer baskı için ise, olduğu gibi kabul etmelisiniz ve yazdırma sürücülerinin, yazılımları çok fazla olduğu için DPI'yı işlemesine izin verin. pikselleri noktalara uyarlamak kadar iyi. – Blindman67
Bunu okuduktan sonra bir şeyler bulmaya çalıştım. Resimlerim vardı, bunlar kaliteli, ama aynı zamanda düşük dpi, 96 ya da daha düşük. Ama her neyse, onları sıkıştırdığımda, hepsi daha sonra bulanık olurlar. Neden? Ve daha büyük veya daha düşük dpi olsa bile resim her zaman 96 dpi'ye aktarılır. Aynı zamanda, doğru kaliteyi kaydetmesi gerektiğini de varsayalım, ama olmaz. Anahtarın ne yazık ki düşük görüntü kalitesi sağladığını, jcrop ile ilgili bir şey olduğunu düşünüyorum ... :( – PLAYCUBE