xorg1990
New member
Hallöle, ich/wir haben einem Problem mit einem Plugin was in einem andren Forum eingesetzt wird.
Es sollen Bilder bevor sie auf den Server gelangen auf 500kb verkleinert werden.
Das komische ist sind die Bilder schon <=500kb sagt mir der Server oder das Skript nöö zu groß.
Mann muss das Bild erst vergrößern damit es Angenommen wird.
Andere beschreiben das der "Upload" ewig dauert. Ich tippe hier auf eine Endlosschleife oder ein Callback wird nicht gefeuert.
Aber mir fällt nicht auf was das Problem sein könnte:
Auffällig ist das es keine Überprüfung gibt ob das Bild nicht schon kleiner ist als das was gewünscht ist, in der Auflösung.
Das bedeutet es wird sowohl upgesized als auch downgesized. Find ich persönlich doof.
Bei 20MP Bildern bricht der Browser zusammen auch nicht gut, Passt das nicht mehr in die DataURL?
Es sollen Bilder bevor sie auf den Server gelangen auf 500kb verkleinert werden.
Das komische ist sind die Bilder schon <=500kb sagt mir der Server oder das Skript nöö zu groß.
Mann muss das Bild erst vergrößern damit es Angenommen wird.
Andere beschreiben das der "Upload" ewig dauert. Ich tippe hier auf eine Endlosschleife oder ein Callback wird nicht gefeuert.
Aber mir fällt nicht auf was das Problem sein könnte:
Code:
WCF.Attachment.Upload.prototype._beginCrop = function(formData_, paramNo_, callback_, uploadID_) {
this._cropCount++;
var self = this;
if (!(window.File && window.FileReader && window.ArrayBuffer && window.Blob && window.Uint8Array && canvasSupported && BlobSupport)) {
this._cropCount--;
callback_.call(self, formData_, uploadID_);
return;
}
var fr = new FileReader();
fr.onload = function(frEvent) {
var img = new Image();
img.onload = function() {
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var ratioX = 1;
var ratioY = 1;
if (img.width > MESSAGE_ATTACHMENT_SCALE_WIDTH) ratioX = img.width / MESSAGE_ATTACHMENT_SCALE_WIDTH;
if (img.height > MESSAGE_ATTACHMENT_SCALE_HEIGHT) ratioY = img.height / MESSAGE_ATTACHMENT_SCALE_HEIGHT;
if (MESSAGE_ATTACHMENT_SCALE_KEEP_RATIO) {
ratioX = ratioY = Math.max(ratioX, ratioY);
}
var newWidth = img.width / ratioX;
var newHeight = img.height / ratioY;
canvas.width = newWidth;
canvas.height = newHeight;
var tmpCanvas = document.createElement("canvas");
var tmpCtx = tmpCanvas.getContext("2d");
var steps = Math.floor(Math.abs(Math.max(ratioX, ratioY)));
if (steps < 0) steps = 1;
if (steps > 5) steps = 5;
var stepAddW = (img.width - newWidth) / steps;
var stepAddH = (img.height - newHeight) / steps;
tmpCanvas.width = img.width;
tmpCanvas.height = img.height;
tmpCtx.drawImage(img, 0, 0, img.width, img.height);
var oldWidth = tmpCanvas.width;
var oldHeight = tmpCanvas.height;
for (var n = 1; n <= steps; n++) {
var tmpWidth = Math.floor(img.width - (n * stepAddW));
var tmpHeight = Math.floor(img.height - (n * stepAddH));
var intermediateCanvas = document.createElement("canvas");
var intermediateCtx = intermediateCanvas.getContext("2d");
intermediateCanvas.width = tmpWidth;
intermediateCanvas.height = tmpHeight;
intermediateCtx.drawImage(tmpCanvas, 0, 0, oldWidth, oldHeight, 0, 0, tmpWidth, tmpHeight);
tmpCtx.clearRect(0, 0, tmpCanvas.width, tmpCanvas.height);
tmpCtx.drawImage(intermediateCanvas, 0, 0, tmpWidth, tmpHeight, 0, 0, tmpWidth, tmpHeight);
oldWidth = tmpWidth;
oldHeight = tmpHeight;
}
ctx.drawImage(tmpCanvas, 0, 0, tmpWidth, tmpHeight, 0, 0, canvas.width, canvas.height);
var quality = parseFloat(MESSAGE_ATTACHMENT_SCALE_QUALITY);
if (!quality) quality = 0.92;
else quality = quality / 100;
var newFile = dataURItoBlob(canvas.toDataURL(formData_.parameters[paramNo_].value.type, quality), formData_.parameters[paramNo_].value.type);
while (newFile.size > USER_ATTACHMENT_MAXSIZE) {
quality -= 0.01;
var oldSize = newFile.size;
newFile = dataURItoBlob(canvas.toDataURL(formData_.parameters[paramNo_].value.type, quality), formData_.parameters[paramNo_].value.type);
if (oldSize == newFile.size) break;
if (quality <= 0.5) break;
}
var withExifInfo = ExifRestorer.restore(img.src, canvas.toDataURL(formData_.parameters[paramNo_].value.type, quality));
newFile = dataURItoBlob(withExifInfo, formData_.parameters[paramNo_].value.type);
formData_.parameters[paramNo_].value = newFile;
self._cropCount--;
callback_.call(self, formData_, uploadID_);
};
img.onerror = function() {
self._realUpload(formData_, paramNo_);
};
img.src = frEvent.target.result;
};
fr.readAsDataURL(formData_.parameters[paramNo_].value);
};
Das bedeutet es wird sowohl upgesized als auch downgesized. Find ich persönlich doof.
Bei 20MP Bildern bricht der Browser zusammen auch nicht gut, Passt das nicht mehr in die DataURL?