स्टैक ओवरफ्लो पर नया यहाँ। मैं एक समाधान पर काम कर रहा हूं, जहां मैं एक .jpg फ़ाइल के रूप में सर्वर पर jcrop का उपयोग कर एक फसल छवि को सहेज सकता हूं। छवि को घन सतह पर एक बनावट के रूप में भी प्रयोग किया जाता है (मैं इसके लिए तीन.जेएस का उपयोग कर रहा हूं)। मैं एक पेशेवर कोडर नहीं हूं, लेकिन मैंने सतह पर तस्वीर प्राप्त करने और सर्वर पर इसे सहेजने में कामयाब रहा है।एक जेपीजी फ़ाइल के रूप में सर्वर को कैनवास सहेजते समय डीपीआई कैसे बढ़ाएं?
लेकिन दुर्भाग्यवश फाइलों में हमेशा एक 96 डीपीआई संकल्प होता है और इसकी गुणवत्ता खराब होती है (यहां तक कि 2000 पीएक्स एक्स 2000 पीएक्स रिज़ॉल्यूशन के साथ)। मैंने एक समाधान खोजने की कोशिश की और मैं अभी भी कुछ और समकालीन खोजने की उम्मीद कर रहा हूं। मैंने उदाहरण के लिए toDataURLHD
विधि के बारे में सुना। मैंने कोशिश की, लेकिन यह काम नहीं किया।
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);
}
और पीएचपी हिस्सा:
यहाँ सर्वर अपलोड करने के लिए मेरी जावास्क्रिप्ट कोड है
if (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);
}
कोड काम करता है, मैं सर्वर पर छवि मिलता है, लेकिन गुणवत्ता खराब है :
क्या अधिक डीपीआई प्राप्त करने का कोई तरीका है?
संपादित करें:
मेरे कोड एक छोटे से जटिल के बाद से मैं बाहरी संसाधनों का इस्तेमाल किया है। उदाहरण के लिए कैनवास टैग "छुपा" था। यहां अपलोड प्रक्रिया का कुछ कोड भी है।
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>
तो यहाँ मैं किसी भी कैनवस टैग नहीं पा सके। लेकिन मुझे पता है, यह उत्पन्न हुआ था, और मैंने इसे "Iconcontroller" फ़ंक्शन के भीतर .js फ़ाइल में पाया।
EDIT2:
मैं मैं हिस्सा है जहां मैं इसे संशोधित करना चाहिए पाया लगता है। मैंने canvas.width=img.width*300/96
विधि की कोशिश की, लेकिन कुछ काम नहीं करता है। हो सकता है कि कोड सही जगह पर न हो।
यहां पूरा कोड। RESIZING AND UPLOAD
और update image canvas
भागों के बाद देखो:
जावास्क्रिप्ट:
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();}
};
}
});
}
मैं भी के बाद से वहाँ कुछ libaries कर रहे हैं, कोड के साथ एक ज़िप फ़ाइल बनाया। Here is the link.
EDIT3:
पता नहीं है जहां Marke से जवाब के लिए चला गया है, लेकिन वैसे भी। समाधान अच्छा था, मुझे उम्मीद है कि मैं इसे अपने कोड में लागू करने के लिए प्रबंधन करूँगा। आपके प्रयासों के लिए धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं, क्योंकि मैं यहां नया हूं और मुझे कोई जवाब देने की भी उम्मीद नहीं थी। :)
आपको केवल इतना करना है कि बिना किसी संशोधन के मूल छवि अपलोड करें, इस तरह आप गुणवत्ता खोने या अवांछित कलाकृतियों को पेश नहीं करते हैं। आकार बदला जा रहा छवि कलाकृतियों का निर्माण करेगा और विभिन्न हार्डवेयर और ब्राउज़र कॉन्फ़िगरेशन आप छवि गुणवत्ता में सुधार नहीं कर सकते इसलिए यदि यह प्रिंट के लिए है आप इसे स्वीकार करते हैं के रूप में यह है और प्रिंट ड्राइवर डीपीआई संभालने दें करने के लिए है के लिए अलग होगा के रूप में अपने सॉफ्टवेयर ज्यादा है पिक्सल को डॉट्स के अनुकूल बनाने के रूप में बेहतर। – Blindman67
मैं बस के बाद मैं इस पढ़ने के कुछ पता लगाने के लिए कोशिश की। मेरे पास चित्र थे, जिनमें अच्छी गुणवत्ता थी, लेकिन कम डीपीआई, जैसे 96 या उससे भी कम। लेकिन वैसे भी, जब मैं उन्हें jcrop, वे बाद में सभी धुंधला कर रहे हैं। ऐसा क्यों है? और तस्वीर हमेशा 96 डीपीआई को निर्यात किया जाता है, भले ही यह बड़ा या कम डीपीआई था। मैं भी ग्रहण करेंगे, कि यह सही गुणवत्ता को बचाने चाहिए, लेकिन यह नहीं होता है। मुझे लगता है कि कुंजी के पास jcrop के साथ कुछ करना है, यह दुर्भाग्य से कम छवि गुणवत्ता प्रदान करता है ... :( – PLAYCUBE