Sie verlassen sich auf das Zuschneidewerkzeug, um eine Benutzeroberfläche für die Benutzer bereitzustellen. Das Problem besteht darin, dass das zurückgegebene Bild an die Schnittstelle und nicht an das Originalbild angepasst ist. Anstatt dass ich die verschiedenen APIs durchforste, um zu sehen, ob sie eine Möglichkeit bieten, dieses Verhalten zu kontrollieren (ich nehme an, zumindest einige davon würden es tun) und weil es so einfach ist, werde ich zeigen, wie man das Bild manuell schneidet.
So verwenden JCrop als Beispiel
Jcrop verschiedene Veranstaltungen für cropstart, cropmove bietet, cropend ... Sie können ein Zuhörer auf diese Ereignisse zu hören hinzufügen und eine Kopie des aktuellen Zuschneiden Schnittstelle Zustand halten
var currentCrop;
jQuery('#target').on('cropstart cropmove cropend',function(e,s,crop){
currentCrop = crop;
}
ich weiß nicht, wo Sie die Schnittstelle Größe festgelegt haben, und ich gehe davon aus das Geschehen um die Ernte Details an der Schnittstelle Skala
var interfaceSize = { //you will have to work this out
w : ?,
h : ?.
}
Ihre oder zurückgeben iginal Bild
var myImage = new Image(); // Assume you know how to load
Also, wenn die Ernte Schaltfläche geklickt werden Sie die neuen Bilddetails durch Skalieren der Ernte erstellen kann wieder auf die ursprüngliche Bildgröße, eine Leinwand auf der beschnittene Größe zu schaffen, zeichnen das Bild so, dass der beschnittenen Bereich ist genau positioniert und gibt die Leinwand als neues Bild zurück.
// image = image to crop
// crop = the current cropping region
// interfaceSize = the size of the full image in the interface
// returns a new cropped image at full res
function myCrop(image,crop,interfaceSize){
var scaleX = image.width/interfaceSize.w; // get x scale
var scaleY = image.height/interfaceSize.h; // get y scale
// get full res crop region. rounding to pixels
var x = Math.round(crop.x * scaleX);
var y = Math.round(crop.y * scaleY);
var w = Math.round(crop.w * scaleX);
var h = Math.round(crop.h * scaleY);
// Assume crop will never pad
// create an drawable image
var croppedImage = document.createElement("canvas");
croppedImage.width = w;
croppedImage.height = h;
var ctx = croppedImage.getContext("2d");
// draw the image offset so the it is correctly cropped
ctx.drawImage(image,-x,-y);
return croppedImage
}
Sie dann nur müssen diese Funktion aufzurufen, wenn die Ernte Taste
var croppedImage;
myButtonElement.onclick = function(){
if(currentCrop !== undefined){ // ensure that there is a selected crop
croppedImage = myCrop(myImage,currentCrop,interfaceSize);
}
}
geklickt wird Sie das Bild zum Download auf eine DataURL umwandeln kann, und laden über
imageData = croppedImage.toDataURL(mimeType,quality) // quality is optional and only for "image/jpeg" images
sie alle gib die native Auflösung der Bilder zurück, abzüglich der abgeschnittenen Pixel, also bin ich ein wenig verwirrt darüber, was du meinst. Könnten Sie ein Beispielbild mit dem Problem und ein Bild dessen, was Sie erwarten, liefern, damit wir sehen können, was das Problem ist? – Blindman67
Hallo Blind! Danke für den Kommentar. Es gab ein Problem [in Jcrop] (http://deepliquid.com/content/Jcrop.html). Ich benutze jetzt cropit. Was ich meinte, ist, dass das zugeschnittene Bild von der Größe des 'Bildvorschau' Fensters abhängt.Wenn ich ein großes Bild habe, sagen 1920x1080px, ich möchte einen ausgewählten Bereich zuschneiden und mein "Vorschaubild" Fenster ist 40x40px, ich werde ein 40x40px Bild bekommen, auch wenn der Bereich für z. 500x500px. Gibt es eine Möglichkeit, diese 500x500px zu erreichen, indem Sie eine viel kleinere Vorschaugröße haben? – PLAYCUBE