react - get width/height of image to process
up vote
1
down vote
favorite
I was wondering how to get the height and width of an image if I'm rendering it react style so I can process it to flip it to portrait mode if the width is larger than the height.
Example: https://codesandbox.io/s/k9kwv0kp93
Example code:
index.js
import React from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
const styles = {
fontFamily: 'sans-serif',
textAlign: 'center',
};
const App = () => (
<div style={styles}>
<Hello name="CodeSandbox" />
<h2>Start editing to see some magic happen {'u2728'}</h2>
</div>
);
render(<App />, document.getElementById('root'));
Hello.js
import React, {Component} from 'react';
export default class Hello extends Component
{
constructor()
{
super();
this.state = {img: null}
this.get_image = this.get_image.bind(this);
}
get_image()
{
let img = <img src="http://via.placeholder.com/350x150" alt="" />;
//manipulate here maybe
this.setState({
img
})
}
render()
{
return (
<div>
<button onClick={this.get_image}>Click me</button>
test
{this.state.img}
</div>
)
}
}
javascript css reactjs
add a comment |
up vote
1
down vote
favorite
I was wondering how to get the height and width of an image if I'm rendering it react style so I can process it to flip it to portrait mode if the width is larger than the height.
Example: https://codesandbox.io/s/k9kwv0kp93
Example code:
index.js
import React from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
const styles = {
fontFamily: 'sans-serif',
textAlign: 'center',
};
const App = () => (
<div style={styles}>
<Hello name="CodeSandbox" />
<h2>Start editing to see some magic happen {'u2728'}</h2>
</div>
);
render(<App />, document.getElementById('root'));
Hello.js
import React, {Component} from 'react';
export default class Hello extends Component
{
constructor()
{
super();
this.state = {img: null}
this.get_image = this.get_image.bind(this);
}
get_image()
{
let img = <img src="http://via.placeholder.com/350x150" alt="" />;
//manipulate here maybe
this.setState({
img
})
}
render()
{
return (
<div>
<button onClick={this.get_image}>Click me</button>
test
{this.state.img}
</div>
)
}
}
javascript css reactjs
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I was wondering how to get the height and width of an image if I'm rendering it react style so I can process it to flip it to portrait mode if the width is larger than the height.
Example: https://codesandbox.io/s/k9kwv0kp93
Example code:
index.js
import React from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
const styles = {
fontFamily: 'sans-serif',
textAlign: 'center',
};
const App = () => (
<div style={styles}>
<Hello name="CodeSandbox" />
<h2>Start editing to see some magic happen {'u2728'}</h2>
</div>
);
render(<App />, document.getElementById('root'));
Hello.js
import React, {Component} from 'react';
export default class Hello extends Component
{
constructor()
{
super();
this.state = {img: null}
this.get_image = this.get_image.bind(this);
}
get_image()
{
let img = <img src="http://via.placeholder.com/350x150" alt="" />;
//manipulate here maybe
this.setState({
img
})
}
render()
{
return (
<div>
<button onClick={this.get_image}>Click me</button>
test
{this.state.img}
</div>
)
}
}
javascript css reactjs
I was wondering how to get the height and width of an image if I'm rendering it react style so I can process it to flip it to portrait mode if the width is larger than the height.
Example: https://codesandbox.io/s/k9kwv0kp93
Example code:
index.js
import React from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
const styles = {
fontFamily: 'sans-serif',
textAlign: 'center',
};
const App = () => (
<div style={styles}>
<Hello name="CodeSandbox" />
<h2>Start editing to see some magic happen {'u2728'}</h2>
</div>
);
render(<App />, document.getElementById('root'));
Hello.js
import React, {Component} from 'react';
export default class Hello extends Component
{
constructor()
{
super();
this.state = {img: null}
this.get_image = this.get_image.bind(this);
}
get_image()
{
let img = <img src="http://via.placeholder.com/350x150" alt="" />;
//manipulate here maybe
this.setState({
img
})
}
render()
{
return (
<div>
<button onClick={this.get_image}>Click me</button>
test
{this.state.img}
</div>
)
}
}
javascript css reactjs
javascript css reactjs
asked Sep 4 '17 at 4:03
A. Lau
3,18951850
3,18951850
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
2
down vote
accepted
React supports a special attribute that you can attach to any component. The ref attribute takes a callback function, and the callback will be executed immediately after the component is mounted or unmounted.
When the ref attribute is used on an HTML element, the ref callback receives the underlying DOM element as its argument
Taken from: https://facebook.github.io/react/docs/refs-and-the-dom.html
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
why is theoffsetHeight
0 though?
– A. Lau
Sep 4 '17 at 10:48
|
show 3 more comments
up vote
0
down vote
i encountered the same issue, i was able to get the img height/width using refs and onLoad.
render() {
return (
<img
src='https://via.placeholder.com/150'
ref={el = this.imgEl = el}
onLoad={() => console.log(this.imgEl.naturalHeight)} // print 150
/>
)
}
Also you should use img.naturalHeight
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
React supports a special attribute that you can attach to any component. The ref attribute takes a callback function, and the callback will be executed immediately after the component is mounted or unmounted.
When the ref attribute is used on an HTML element, the ref callback receives the underlying DOM element as its argument
Taken from: https://facebook.github.io/react/docs/refs-and-the-dom.html
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
why is theoffsetHeight
0 though?
– A. Lau
Sep 4 '17 at 10:48
|
show 3 more comments
up vote
2
down vote
accepted
React supports a special attribute that you can attach to any component. The ref attribute takes a callback function, and the callback will be executed immediately after the component is mounted or unmounted.
When the ref attribute is used on an HTML element, the ref callback receives the underlying DOM element as its argument
Taken from: https://facebook.github.io/react/docs/refs-and-the-dom.html
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
why is theoffsetHeight
0 though?
– A. Lau
Sep 4 '17 at 10:48
|
show 3 more comments
up vote
2
down vote
accepted
up vote
2
down vote
accepted
React supports a special attribute that you can attach to any component. The ref attribute takes a callback function, and the callback will be executed immediately after the component is mounted or unmounted.
When the ref attribute is used on an HTML element, the ref callback receives the underlying DOM element as its argument
Taken from: https://facebook.github.io/react/docs/refs-and-the-dom.html
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
React supports a special attribute that you can attach to any component. The ref attribute takes a callback function, and the callback will be executed immediately after the component is mounted or unmounted.
When the ref attribute is used on an HTML element, the ref callback receives the underlying DOM element as its argument
Taken from: https://facebook.github.io/react/docs/refs-and-the-dom.html
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
handleSize(image) {
console.log(image.offsetWidth, image.offsetHeight)
}
render() {
return React.createElement("img", {
src: "http://cdn.collider.com/wp-content/uploads/2016/07/narcos-season-2-image-5.jpg",
ref: image => {
this.handleSize(image);
}
});
}
}
ReactDOM.render(React.createElement(MyComponent, null), document.getElementById('root'))
img {
width: 200px;
height: 133px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-with-addons.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
edited Sep 4 '17 at 20:44
answered Sep 4 '17 at 4:47
felixmosh
3,6022517
3,6022517
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
why is theoffsetHeight
0 though?
– A. Lau
Sep 4 '17 at 10:48
|
show 3 more comments
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
why is theoffsetHeight
0 though?
– A. Lau
Sep 4 '17 at 10:48
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
around the right idea, but it's returning 0 for both height and width. Tried to add an onLoad to it too but it didn't change the results :S
– A. Lau
Sep 4 '17 at 5:23
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
Please share your attempts
– felixmosh
Sep 4 '17 at 5:55
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I might rename the question since it's more about onload.
– A. Lau
Sep 4 '17 at 8:41
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
I've updated the answer to real implementation. React will execute ref callback immediately after the component is mounted, so no need for onLoad on the image itself
– felixmosh
Sep 4 '17 at 9:01
why is the
offsetHeight
0 though?– A. Lau
Sep 4 '17 at 10:48
why is the
offsetHeight
0 though?– A. Lau
Sep 4 '17 at 10:48
|
show 3 more comments
up vote
0
down vote
i encountered the same issue, i was able to get the img height/width using refs and onLoad.
render() {
return (
<img
src='https://via.placeholder.com/150'
ref={el = this.imgEl = el}
onLoad={() => console.log(this.imgEl.naturalHeight)} // print 150
/>
)
}
Also you should use img.naturalHeight
add a comment |
up vote
0
down vote
i encountered the same issue, i was able to get the img height/width using refs and onLoad.
render() {
return (
<img
src='https://via.placeholder.com/150'
ref={el = this.imgEl = el}
onLoad={() => console.log(this.imgEl.naturalHeight)} // print 150
/>
)
}
Also you should use img.naturalHeight
add a comment |
up vote
0
down vote
up vote
0
down vote
i encountered the same issue, i was able to get the img height/width using refs and onLoad.
render() {
return (
<img
src='https://via.placeholder.com/150'
ref={el = this.imgEl = el}
onLoad={() => console.log(this.imgEl.naturalHeight)} // print 150
/>
)
}
Also you should use img.naturalHeight
i encountered the same issue, i was able to get the img height/width using refs and onLoad.
render() {
return (
<img
src='https://via.placeholder.com/150'
ref={el = this.imgEl = el}
onLoad={() => console.log(this.imgEl.naturalHeight)} // print 150
/>
)
}
Also you should use img.naturalHeight
edited 18 hours ago
answered 20 hours ago
Pierre Ferry
11117
11117
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46030129%2freact-get-width-height-of-image-to-process%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password