Here is how to get a GoPro’s image data (EXIF) such as size, settings, configuration and location using PHP and exif_read_data().
I have already covered getting image EXIF data in PHP see here so the concept is exactly the same except a GoPro has more/different values in the returned data than a regular camera would.
Simply grab an image taken from a GoPro define it at $image_file = ''; and run the below PHP code to see all the available EXIF data:
$image_file = '';
$exif = exif_read_data($image_file, 0, true);
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}The GPS data (if the GoPro had it turned on) is formatted in extra array’s and not in simple Latitude x Longitude format.
With the help of a function found here it can easily get turned into a useable format.
Running the code below the data returned was

This can be helpful if you wanted to create an image database, compress your photos and make a thumbnail by executing a for all jpg in folder.
Full code with output:
<?php
$image_file = 'GOPR1280.jpg';
$exif = exif_read_data($image_file, 0, true);
$file_name = $exif["FILE"]["FileName"];
$model = $exif["IFD0"]["Model"];
$software = $exif["IFD0"]["Software"];
$size = $exif["FILE"]["FileSize"];
$date_time = $exif["IFD0"]["DateTime"];
$width = $exif["COMPUTED"]["Width"];
$height = $exif["COMPUTED"]["Height"];
$aperture = $exif["COMPUTED"]["ApertureFNumber"];
$shutter_speed = $exif["EXIF"]["ExposureTime"];
$iso = $exif["EXIF"]["ISOSpeedRatings"];
$focal_length = $exif["EXIF"]["FocalLength"];
$contrast = $exif["EXIF"]["Contrast"];
$saturation = $exif["EXIF"]["Saturation"];
$sharpness = $exif["EXIF"]["Sharpness"];
$white_balance = $exif["EXIF"]["WhiteBalance"];
$digital_zoom_ratio = $exif["EXIF"]["DigitalZoomRatio"];
$fl_calc = eval('return ' . $focal_length . ';');
$focal_length_mm = "$fl_calc mm";
$exif2 = exif_read_data($image_file);
$latitude = gps($exif2["GPSLatitude"], $exif2['GPSLatitudeRef']);
$longitude = gps($exif2["GPSLongitude"], $exif2['GPSLongitudeRef']);
function gps($coordinate, $hemisphere)//@David Jones StackOverflow
{
if (is_string($coordinate)) {
$coordinate = array_map("trim", explode(",", $coordinate));
}
for ($i = 0; $i < 3; $i++) {
$part = explode('/', $coordinate[$i]);
if (count($part) == 1) {
$coordinate[$i] = $part[0];
} else if (count($part) == 2) {
$coordinate[$i] = floatval($part[0]) / floatval($part[1]);
} else {
$coordinate[$i] = 0;
}
}
list($degrees, $minutes, $seconds) = $coordinate;
$sign = ($hemisphere == 'W' || $hemisphere == 'S') ? -1 : 1;
return $sign * ($degrees + $minutes / 60 + $seconds / 3600);
}
function format_bytes($bytes)//@Adnan StackOverflow
{
if ($bytes >= 1073741824) {
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
} elseif ($bytes >= 1048576) {
$bytes = number_format($bytes / 1048576, 2) . ' MB';
} elseif ($bytes >= 1024) {
$bytes = number_format($bytes / 1024, 2) . ' KB';
} elseif ($bytes > 1) {
$bytes = $bytes . ' bytes';
} elseif ($bytes == 1) {
$bytes = $bytes . ' byte';
} else {
$bytes = '0 bytes';
}
return $bytes;
}
$size_formatted = format_bytes(filesize($file_name));
echo "$file_name ($width x $height) $size_formatted was shot at $date_time with a $model<br>";
echo "ISO $iso Shutter speed at $shutter_speed and aperture of $aperture. Focal length was $focal_length_mm<br>";
echo "Contrast: $contrast Digital Zoom ratio: $digital_zoom_ratio Saturation: $saturation Sharpness: $sharpness White Balance: $white_balance<br>";
echo "LAT:$latitude LONG:$longitude <br>";
echo "Software: $software";