<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/*** 画像アップロード時にEXIFから個人特定リスクのある情報を削除する ***/
/* GDでは仕様上全EXIFデータが削除されることに注意 */
function haup_delete_exif_data_while_upload( $upload ){
	// 画像ファイル以外（PDFなど）は処理をスキップ
	if (strpos($upload['type'], 'image') === false) {
		return $upload;
	}

	$file_path = $upload['file'];
    
	// WordPress標準の画像エディター（GD or ImageMagick）を呼び出し
	$editor = wp_get_image_editor($file_path);

	if (!is_wp_error($editor)) {
        
		// 1. ImageMagickが使える場合：必要な情報を残しつつ、特定リスクのみを消す
		if ($editor instanceof WP_Image_Editor_Magick) {
			try {
				$imagick = $editor->get_imagick();
                
				// 削除対象のパターン：GPS、シリアル番号、作成者、著作権、コメント、説明
				$target_patterns = [
					'/exif:GPS.*/i',
					'/exif:.*SerialNumber/i',
					'/exif:Artist/i',
					'/exif:Copyright/i',
					'/exif:UserComment/i',
					'/exif:ImageDescription/i'
				];

				foreach ($target_patterns as $pattern) {
					$imagick->pregReplaceImageProfiles($pattern, '');
				}

				// プロファイルを整理して保存
				$editor->save($file_path);
                
			} catch (Exception $e) {
				error_log('EXIFクレンジングエラー (Imagick): ' . $e->getMessage());
			}
		} 
        
		// 2. GDしか使えない場合：部分削除不可のため、再保存による「全削除」を実行
		elseif ($editor instanceof WP_Image_Editor_GD) {
			// GDは画像を再描画して保存する過程で、すべてのメタデータを破棄します
			$editor->set_quality(90); // 100に近づけるほど劣化は抑えられます
			$editor->save($file_path);
		}
	}

	return $upload;
}
add_filter('wp_handle_upload','haup_delete_exif_data_while_upload');