צפיות
תשובות
לולאה יעילה
אני מעוניין בהקטנת מימדי תמונה (אופן הופעתה) באמצעות צד לקוח כמובן.
בתחילה עשיתי כך :
var img = document.createElement("img") // OR new Image()
img.src = "somePicture.jpg";
document.write("<img src=somePicture.jpg height=" + img.height/2 + " width=" + img.width/2 + " align=right >");
בעצם חילקתי את מימדי התמונה (רוחב וגובה) ב2 .
עכשיו אני מעוניין בהקטנת תמונה (אשר יכולה להגיע למימדים של 2000-3000 של רוחב/גובה) לגודל מסויים (לא ספציפי) שלא יהיה יותר מ250 רוחב ו125 גובה.
כמובן אם הייתי רוצה שהגודל הזה יהיה רלוונטי לכל התמונות, לא הייתי בכלל צריך לערב JS בעניין – אך ישנם תמונות שההפרש בין הגובה לרוחב שונים – וקביעת גודל אחד משנה את הצורה המקורית.
דוגמא: תמונה של עט.
תמונה של עט רחבה במימדי הרוחב שלה וקטנה במימדי הגובה שלה, ולכן הצגתה בגודל 250/125 פיקסלים תמתח אותה והעט לא יראה טוב.
השאלה היא – כיצד אני יכול להגיע למצב שבו אני מחלק את מימדי התמונה אך דואג במקביל (לאחר החלוקה) שהגודל לא עבר את ה250 רוחב ו125 גובה.
אפשרי בכלל?
5 תשובות
הרעיון הוא לעבור בלולאה
ולחלק ב-2 את מימדי התמונה בכל איטרציה, התנאי יציאה מהלולאה הוא שהרוחב והגובה קטנים או שווים למידות שאתה מקציב.
אם יהיה לי זמן מחר אני אעלה קוד.
בהצלחה
תודה..
תודה ניר, אני אנסה לעבוד לפי האלגוריתם שנתת לי.
מקווה שיעבוד :]
בכל אופן, אשמח לראות את הקוד שלך ולהשוות לאחר מכן יעילות.
למה לולאה, כשאפשר להשתמש במתימטיקה?
אתה יכול לחשב את היחס בין הגודל של התמונה לגודל המותר
(גם רוחב וגם אורך) ואז לחלק את המימדים לפי היחס היותר גדול…
פונקציה פשוטה:
function resizeImage(oImg, iMaxWidth, iMaxHeight) {
var iWidthRatio, iHeightRatio, maxRatio, newWidth, newHeight;
iWidthRatio = oImg.width / iMaxWidth;
iHeightRatio = oImg.height / iMaxHeight;
maxRatio = Math.max(iWidthRatio, iHeightRatio);
newWidth = oImg.width / maxRatio ;
newHeight = oImg.height / maxRatio;
oImg.width = newWidth;
oImg.height = newHeight;
}
צודק טעות שלי
בלי להתייחס לשאר ההודעה
ההערה בשורת הקוד הראשונה מיותרת… תמיד עדיף createElement.