Get the width and height of an image without downloading it
You will most likely not be able to do so without actually downloading the image (as in using the bandwidth).
That being said, you can use the FastImage gem to do this for you.
require 'fastimage'
FastImage.size("http://stephensykes.com/images/ss.com_x.gif")
=> [266, 56] # width, height
How to determine the size of an image without downloading it (in full)?
I managed to answer my own question and I've included the PHP code snippet.
The only downside (for me at least) is that this writes the partial image download to the file-system prior to reading in the dimensions with getImageSize
.
For me 10240 bytes is the safe limit to check for jpg images that were 200 to 400K in size.
function remoteImage($url){
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_RANGE, "0-10240");
$fn = "partial.jpg";
$raw = curl_exec($ch);
$result = array();
if(file_exists($fn)){
unlink($fn);
}
if ($raw !== false) {
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status == 200 || $status == 206) {
$result["w"] = 0;
$result["h"] = 0;
$fp = fopen($fn, 'x');
fwrite($fp, $raw);
fclose($fp);
$size = getImageSize($fn);
if ($size===false) {
// Cannot get file size information
} else {
// Return width and height
list($result["w"], $result["h"]) = $size;
}
}
}
curl_close ($ch);
return $result;
}
Remote file size without downloading file
Found something about this here:
Here's the best way (that I've found) to get the size of a remote
file. Note that HEAD requests don't get the actual body of the request,
they just retrieve the headers. So making a HEAD request to a resource
that is 100MB will take the same amount of time as a HEAD request to a
resource that is 1KB.
<?php
/**
* Returns the size of a file without downloading it, or -1 if the file
* size could not be determined.
*
* @param $url - The location of the remote file to download. Cannot
* be null or empty.
*
* @return The size of the file referenced by $url, or -1 if the size
* could not be determined.
*/
function curl_get_file_size( $url ) {
// Assume failure.
$result = -1;
$curl = curl_init( $url );
// Issue a HEAD request and follow any redirects.
curl_setopt( $curl, CURLOPT_NOBODY, true );
curl_setopt( $curl, CURLOPT_HEADER, true );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $curl, CURLOPT_USERAGENT, get_user_agent_string() );
$data = curl_exec( $curl );
curl_close( $curl );
if( $data ) {
$content_length = "unknown";
$status = "unknown";
if( preg_match( "/^HTTP\/1\.[01] (\d\d\d)/", $data, $matches ) ) {
$status = (int)$matches[1];
}
if( preg_match( "/Content-Length: (\d+)/", $data, $matches ) ) {
$content_length = (int)$matches[1];
}
// http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
if( $status == 200 || ($status > 300 && $status <= 308) ) {
$result = $content_length;
}
}
return $result;
}
?>
Usage:
$file_size = curl_get_file_size( "http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file" );
Related Topics
Why Must a Protocol Operator Be Implemented as a Global Function
iOS Permission Alerts - Removing or Suppressing
Fonts Not Displaying in Interface Builder
Enable Uialertaction of Uialertcontroller Only After Input Is Validated
Get Sms Broadcast with Text Body Without Jailbreak But Private Frameworks in iOS
Thread 1:Exc_Bad_Access (Code = 1, Address = 0X30000008)
Nstask or Equivalent for Iphone
Customizing Uilocalnotification's Alert
How to Permanently Allow Usage of Camera on Trusted Websites with iOS - Safari
Building Ffmpeg iOS Libraries for Armv7, Armv7S, Arm64, I386 and Universal
Uibarbuttonitem Custom View in Uinavigationbar
How to Write Output of Augraph to a File
Share Datas Between Two Apps with iOS 8 App Groups (Using Nsuserdefaults)
How to Stop and Resume Background Audio from iPhone App
Why Isn't Preferredcontentsize Used by iPhone 6 Plus Landscape