มี JavaScript หรือ jQuery APIs หรือวิธีการเพื่อให้ได้ขนาดของภาพในหน้า?
มี JavaScript หรือ jQuery APIs หรือวิธีการเพื่อให้ได้ขนาดของภาพในหน้า?
คำตอบ:
คุณสามารถรับภาพโดยทางโปรแกรมและตรวจสอบขนาดโดยใช้ Javascript ...
var img = new Image();
img.onload = function() {
alert(this.width + 'x' + this.height);
}
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';
สิ่งนี้มีประโยชน์หากภาพไม่ได้เป็นส่วนหนึ่งของมาร์กอัป
clientWidthและclientHeightเป็นคุณสมบัติ DOM ที่แสดงขนาดในเบราว์เซอร์ปัจจุบันของมิติด้านในขององค์ประกอบ DOM (ไม่รวมระยะขอบและเส้นขอบ) ดังนั้นในกรณีขององค์ประกอบ IMG สิ่งนี้จะได้ขนาดที่แท้จริงของภาพที่มองเห็นได้
var img = document.getElementById('imageid');
//or however you get a handle to the IMG
var width = img.clientWidth;
var height = img.clientHeight;
$.fn.width
$.fn.height
document.getElementById
มีความยาวในการพิมพ์ แต่ 10 $('#...')[0]
ครั้งเร็วกว่า
นอกจากนี้ (นอกเหนือจากคำตอบของ Rex และ Ian) ยังมี:
imageElement.naturalHeight
และ
imageElement.naturalWidth
สิ่งเหล่านี้ให้ความสูงและความกว้างของไฟล์ภาพเอง (แทนที่จะเป็นเพียงองค์ประกอบภาพ)
หากคุณใช้ jQuery และคุณกำลังขอขนาดภาพคุณต้องรอจนกว่าจะโหลดหรือคุณจะได้รับเลขศูนย์
$(document).ready(function() {
$("img").load(function() {
alert($(this).height());
alert($(this).width());
});
});
ฉันคิดว่าการอัปเดตคำตอบเหล่านี้มีประโยชน์เพราะหนึ่งในคำตอบที่ได้รับการโหวตอย่างดีที่สุดแนะนำให้ใช้clientWidth
และลูกค้าความสูงซึ่งตอนนี้ฉันคิดว่าล้าสมัยแล้ว
ฉันได้ทำการทดลองกับ HTML5 เพื่อดูว่าค่าใดได้รับคืนจริง
ก่อนอื่นฉันใช้โปรแกรมชื่อ Dash เพื่อดูภาพรวมของ API รูปภาพ มันระบุว่าheight
และwidth
มีการแสดงผลความสูง / ความกว้างของภาพและที่naturalHeight
และnaturalWidth
มีความสูงที่แท้จริง / ความกว้างของภาพ (และเป็น HTML5 เท่านั้น)
ฉันใช้รูปผีเสื้อที่สวยงามจากไฟล์ที่มีความสูง 300 และกว้าง 400 และ Javascript นี้:
var img = document.getElementById("img1");
console.log(img.height, img.width);
console.log(img.naturalHeight, img.naturalWidth);
console.log($("#img1").height(), $("#img1").width());
จากนั้นฉันใช้ HTML นี้พร้อม CSS แบบอินไลน์สำหรับความสูงและความกว้าง
<img style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />
ผล:
/*Image Element*/ height == 300 width == 400
naturalHeight == 300 naturalWidth == 400
/*Jquery*/ height() == 120 width() == 150
/*Actual Rendered size*/ 120 150
ฉันเปลี่ยน HTML เป็นดังต่อไปนี้:
<img height="90" width="115" id="img1" src="img/Butterfly.jpg" />
เช่นการใช้แอตทริบิวต์ความสูงและความกว้างมากกว่ารูปแบบอินไลน์
ผล:
/*Image Element*/ height == 90 width == 115
naturalHeight == 300 naturalWidth == 400
/*Jquery*/ height() == 90 width() == 115
/*Actual Rendered size*/ 90 115
ฉันเปลี่ยน HTML เป็นดังต่อไปนี้:
<img height="90" width="115" style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />
คือการใช้ทั้งคุณสมบัติและ CSS เพื่อดูว่าจะมีความสำคัญ
ผล:
/*Image Element*/ height == 90 width == 115
naturalHeight == 300 naturalWidth == 400
/*Jquery*/ height() == 120 width() == 150
/*Actual Rendered size*/ 120 150
ใช้ JQuery คุณทำสิ่งนี้:
var imgWidth = $("#imgIDWhatever").width();
width
และheight
คุณลักษณะของimg
องค์ประกอบได้
สิ่งอื่น ๆ ที่ลืมคือคุณไม่สามารถตรวจสอบขนาดภาพก่อนที่จะโหลด เมื่อผู้เขียนตรวจสอบวิธีการโพสต์ทั้งหมดมันจะทำงานบน localhost เท่านั้น เนื่องจากสามารถใช้ jQuery ได้ที่นี่โปรดจำไว้ว่าเหตุการณ์ 'พร้อม' ถูกยิงก่อนที่จะโหลดรูปภาพ $ ('# xxx'). width () และ .height () ควรเปิดใช้งานในเหตุการณ์ onload หรือใหม่กว่า
คุณสามารถทำได้โดยใช้การเรียกกลับของเหตุการณ์โหลดเนื่องจากไม่ทราบขนาดของภาพจนกว่าจะเสร็จสิ้นการโหลดจริง บางอย่างเช่นรหัสด้านล่าง ...
var imgTesting = new Image();
function CreateDelegate(contextObject, delegateMethod)
{
return function()
{
return delegateMethod.apply(contextObject, arguments);
}
}
function imgTesting_onload()
{
alert(this.width + " by " + this.height);
}
imgTesting.onload = CreateDelegate(imgTesting, imgTesting_onload);
imgTesting.src = 'yourimage.jpg';
ด้วยjQuery library-
การใช้งานและ.width()
.height()
เพิ่มเติมในความกว้าง jQueryและ jQuery heigth
$(document).ready(function(){
$("button").click(function()
{
alert("Width of image: " + $("#img_exmpl").width());
alert("Height of image: " + $("#img_exmpl").height());
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<img id="img_exmpl" src="http://images.all-free-download.com/images/graphicthumb/beauty_of_nature_9_210287.jpg">
<button>Display dimensions of img</button>
โอเคฉันคิดว่าฉันปรับปรุงซอร์สโค้ดเพื่อให้สามารถโหลดรูปภาพก่อนที่จะพยายามค้นหาคุณสมบัติของมันมิฉะนั้นจะแสดง '0 * 0' เนื่องจากคำสั่งถัดไปจะถูกเรียกก่อนที่จะโหลดไฟล์ลงใน เบราว์เซอร์ ต้อง jquery ...
function getImgSize(imgSrc){
var newImg = new Image();
newImg.src = imgSrc;
var height = newImg.height;
var width = newImg.width;
p = $(newImg).ready(function(){
return {width: newImg.width, height: newImg.height};
});
alert (p[0]['width']+" "+p[0]['height']);
}
สมมติว่าเราต้องการได้ขนาดภาพของ <img id="an-img" src"...">
// Query after all the elements on the page have loaded.
// Or, use `onload` on a particular element to check if it is loaded.
document.addEventListener('DOMContentLoaded', function () {
var el = document.getElementById("an-img");
console.log({
"naturalWidth": el.naturalWidth, // Only on HTMLImageElement
"naturalHeight": el.naturalHeight, // Only on HTMLImageElement
"offsetWidth": el.offsetWidth,
"offsetHeight": el.offsetHeight
});
มิติธรรมชาติ
el.naturalWidth
และel.naturalHeight
จะทำให้เรามีมิติตามธรรมชาติขนาดของไฟล์ภาพ
เค้าโครงขนาด
el.offsetWidth
และel.offsetHeight
จะทำให้เรามีมิติที่องค์ประกอบจะถูกแสดงในเอกสาร
ก่อนใช้ขนาดภาพจริงคุณควรโหลดภาพต้นฉบับ หากคุณใช้กรอบงาน JQuery คุณจะได้ขนาดภาพที่แท้จริงได้ง่ายๆ
$("ImageID").load(function(){
console.log($(this).width() + "x" + $(this).height())
})
คำตอบนี้เป็นสิ่งที่ฉันกำลังมองหา (ใน jQuery):
var imageNaturalWidth = $('image-selector').prop('naturalWidth');
var imageNaturalHeight = $('image-selector').prop('naturalHeight');
คุณสามารถมีฟังก์ชั่นที่ง่ายเช่นต่อไปนี้ ( imageDimensions()
) ถ้าคุณไม่กลัวใช้สัญญา
// helper to get dimensions of an image
const imageDimensions = file => new Promise((resolve, reject) => {
const img = new Image()
// the following handler will fire after the successful parsing of the image
img.onload = () => {
const { naturalWidth: width, naturalHeight: height } = img
resolve({ width, height })
}
// and this handler will fire if there was an error with the image (like if it's not really an image or a corrupted one)
img.onerror = () => {
reject('There was some problem with the image.')
}
img.src = URL.createObjectURL(file)
})
// here's how to use the helper
const getInfo = async ({ target: { files } }) => {
const [file] = files
try {
const dimensions = await imageDimensions(file)
console.info(dimensions)
} catch(error) {
console.error(error)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
Select an image:
<input
type="file"
onchange="getInfo(event)"
/>
<br />
<small>It works offline.</small>
คำตอบ JQuery:
$height = $('#image_id').height();
$width = $('#image_id').width();
คิดว่านี่อาจเป็นประโยชน์กับบางคนที่ใช้ Javascript และ / หรือ Typescript ในปี 2019
ฉันพบสิ่งต่อไปนี้ตามที่บางคนแนะนำว่าไม่ถูกต้อง:
let img = new Image();
img.onload = function() {
console.log(this.width, this.height) // Error: undefined is not an object
};
img.src = "http://example.com/myimage.jpg";
สิ่งนี้ถูกต้อง:
let img = new Image();
img.onload = function() {
console.log(img.width, img.height)
};
img.src = "http://example.com/myimage.jpg";
สรุป:
ใช้img
ไม่ได้this
ในonload
ฟังก์ชั่น
เมื่อเร็ว ๆ นี้ฉันมีปัญหาเดียวกันสำหรับข้อผิดพลาดในแถบเลื่อนเฟล็กซ์ ความสูงของภาพแรกถูกตั้งค่าให้เล็กลงเนื่องจากความล่าช้าในการโหลด ฉันลองวิธีต่อไปนี้เพื่อแก้ไขปัญหาดังกล่าวและใช้งานได้
// create image with a reference id. Id shall be used for removing it from the dom later.
var tempImg = $('<img id="testImage" />');
//If you want to get the height with respect to any specific width you set.
//I used window width here.
tempImg.css('width', window.innerWidth);
tempImg[0].onload = function () {
$(this).css('height', 'auto').css('display', 'none');
var imgHeight = $(this).height();
// Remove it if you don't want this image anymore.
$('#testImage').remove();
}
//append to body
$('body').append(tempImg);
//Set an image url. I am using an image which I got from google.
tempImg[0].src ='http://aspo.org/wp-content/uploads/strips.jpg';
สิ่งนี้จะให้ความสูงกับความกว้างที่คุณตั้งไว้มากกว่าความกว้างดั้งเดิมหรือศูนย์
คุณยังสามารถใช้:
var image=document.getElementById("imageID");
var width=image.offsetWidth;
var height=image.offsetHeight;
Nicky De Maeyer ถามภาพพื้นหลัง ฉันเพิ่งได้รับจาก css และแทนที่ "url ()":
var div = $('#my-bg-div');
var url = div.css('background-image').replace(/^url\(\'?(.*)\'?\)$/, '$1');
var img = new Image();
img.src = url;
console.log('img:', img.width + 'x' + img.height); // zero, image not yet loaded
console.log('div:', div.width() + 'x' + div.height());
img.onload = function() {
console.log('img:', img.width + 'x' + img.height, (img.width/div.width()));
}
s.substr(4,s.length-5)
มันอย่างน้อยก็ง่ายต่อสายตา;)
คุณสามารถใช้คุณสมบัติตัวจัดการ onload เมื่อหน้าโหลด js หรือ jquery เช่นนี้: -
$(document).ready(function(){
var width = img.clientWidth;
var height = img.clientHeight;
});
ง่ายๆคุณสามารถทดสอบเช่นนี้
<script>
(function($) {
$(document).ready(function() {
console.log("ready....");
var i = 0;
var img;
for(i=1; i<13; i++) {
img = new Image();
img.src = 'img/' + i + '.jpg';
console.log("name : " + img.src);
img.onload = function() {
if(this.height > this.width) {
console.log(this.src + " : portrait");
}
else if(this.width > this.height) {
console.log(this.src + " : landscape");
}
else {
console.log(this.src + " : square");
}
}
}
});
}(jQuery));
</script>
var img = document.getElementById("img_id");
alert( img.height + " ;; " + img .width + " ;; " + img .naturalHeight + " ;; " + img .clientHeight + " ;; " + img.offsetHeight + " ;; " + img.scrollHeight + " ;; " + img.clientWidth + " ;; " + img.offsetWidth + " ;; " + img.scrollWidth )
//But all invalid in Baidu browser 360 browser ...
มันเป็นสิ่งสำคัญที่จะลบการตั้งค่าเบราว์เซอร์ตีความจาก div ผู้ปกครอง ดังนั้นหากคุณต้องการความกว้างและความสูงของภาพที่แท้จริงคุณก็สามารถใช้
$('.right-sidebar').find('img').each(function(){
$(this).removeAttr("width");
$(this).removeAttr("height");
$(this).imageResize();
});
นี่เป็นตัวอย่างหนึ่งของโครงการ TYPO3 จากฉันที่ฉันต้องการคุณสมบัติที่แท้จริงของภาพเพื่อปรับขนาดด้วยความสัมพันธ์ที่ถูกต้อง
var imgSrc, imgW, imgH;
function myFunction(image){
var img = new Image();
img.src = image;
img.onload = function() {
return {
src:image,
width:this.width,
height:this.height};
}
return img;
}
var x = myFunction('http://www.google.com/intl/en_ALL/images/logo.gif');
//Waiting for the image loaded. Otherwise, system returned 0 as both width and height.
x.addEventListener('load',function(){
imgSrc = x.src;
imgW = x.width;
imgH = x.height;
});
x.addEventListener('load',function(){
console.log(imgW+'x'+imgH);//276x110
});
console.log(imgW);//undefined.
console.log(imgH);//undefined.
console.log(imgSrc);//undefined.
นี่คือวิธีการของฉันหวังว่าจะเป็นประโยชน์ :)
function outmeInside() {
var output = document.getElementById('preview_product_image');
if (this.height < 600 || this.width < 600) {
output.src = "http://localhost/danieladenew/uploads/no-photo.jpg";
alert("The image you have selected is low resloution image.Your image width=" + this.width + ",Heigh=" + this.height + ". Please select image greater or equal to 600x600,Thanks!");
} else {
output.src = URL.createObjectURL(event.target.files[0]);
}
return;
}
img.src = URL.createObjectURL(event.target.files[0]);
}
ใช้งานได้กับภาพตัวอย่างหลายภาพและอัปโหลด หากคุณต้องเลือกภาพแต่ละภาพทีละภาพ จากนั้นคัดลอกและวางลงในฟังก์ชั่นภาพตัวอย่างทั้งหมดและตรวจสอบ !!!
ก่อนที่จะได้รับคุณลักษณะขององค์ประกอบหน้าเอกสารควรเป็น onload:
window.onload=function(){
console.log(img.offsetWidth,img.offsetHeight);
}
เพียงผ่านวัตถุไฟล์ img ซึ่งได้มาจากองค์ประกอบอินพุตเมื่อเราเลือกไฟล์ที่ถูกต้องมันจะให้ความสูงและความกว้างของภาพในระดับ Netural
function getNeturalHeightWidth(file) {
let h, w;
let reader = new FileReader();
reader.onload = () => {
let tmpImgNode = document.createElement("img");
tmpImgNode.onload = function() {
h = this.naturalHeight;
w = this.naturalWidth;
};
tmpImgNode.src = reader.result;
};
reader.readAsDataURL(file);
}
return h, w;
}