tôi đang tìm kiếm một giải pháp cho điều này là tốt. Cuối cùng, tôi đã sử dụng PHP để viết lại ảnh JPEG với dữ liệu TẤT CẢ Exif bị loại bỏ. Tôi không cần nó vì mục đích của mình.
Tùy chọn này có nhiều ưu điểm ...
- Các tập tin nhỏ hơn vì dữ liệu EXIF đã biến mất.
- Không làm giảm chất lượng hình ảnh (vì dữ liệu hình ảnh không thay đổi).
Ngoài ra lưu ý khi sử dụng imagecreatefromjpeg: Tôi đã thử tệp này và tệp của tôi lớn hơn. Nếu bạn đặt chất lượng thành 100, tệp của bạn sẽ LỚN hơn, vì hình ảnh đã được lấy lại và sau đó được lưu trữ theo cách không bị mất. Và nếu bạn không sử dụng chất lượng 100, bạn sẽ mất chất lượng hình ảnh. Cách duy nhất để tránh resampling là không sử dụng imagecreatefromjpeg.
Đây là chức năng của tôi ...
function removeExif($old, $new)
{
$f1 = fopen($old, 'rb');
$f2 = fopen($new, 'wb');
// Find EXIF marker
while (($s = fread($f1, 2))) {
$word = unpack('ni', $s)['i'];
if ($word == 0xFFE1) {
// Read length (includes the word used for the length)
$s = fread($f1, 2);
$len = unpack('ni', $s)['i'];
// Skip the EXIF info
fread($f1, $len - 2);
break;
} else {
fwrite($f2, $s, 2);
}
}
// Write the rest of the file
while (($s = fread($f1, 4096))) {
fwrite($f2, $s, strlen($s));
}
fclose($f1);
fclose($f2);
}
wont này gây ra một recompression của jpg ?? cảm ơn. – tau
Sử dụng '$ res = imagecreatefromjpeg ($ filename)' để tải hình ảnh, sau đó 'imagejpeg ($ res, $ filename, QUALITY)', đặt 100 thành Chất lượng - sự mất mát, nếu có, nên tối thiểu. –
@ ring0: cảm ơn! bệnh cố gắng này ngay sau khi tôi có cơ hội (sau này ngày hôm nay). – tau