Added SVG for firefox

This commit is contained in:
DB p 2025-03-20 15:58:30 +09:00
parent cab0cb8e5a
commit d05389c229

View file

@ -167,18 +167,47 @@ public abstract class FirefoxBookmarkLoaderBase : IBookmarkLoader
}
}
private bool IsSvgData(byte[] data)
{
if (data == null || data.Length < 5)
return false;
// SVG 파일 시그니처 확인
// ASCII로 시작하는 SVG XML 헤더 확인
string header = System.Text.Encoding.ASCII.GetString(data, 0, Math.Min(data.Length, 200)).ToLower();
return header.Contains("<svg") ||
header.StartsWith("<?xml") && header.Contains("<svg") ||
header.Contains("image/svg+xml");
}
private void SaveBitmapData(byte[] imageData, string outputPath)
{
try
{
using var ms = new MemoryStream(imageData);
using var bitmap = SKBitmap.Decode(ms);
if (bitmap != null)
// SVG 파일 시그니처 확인
bool isSvg = IsSvgData(imageData);
if (isSvg)
{
using var image = SKImage.FromBitmap(bitmap);
using var data = image.Encode(SKEncodedImageFormat.Png, 100);
using var fs = File.OpenWrite(outputPath);
data.SaveTo(fs);
// SVG 데이터는 있는 그대로 저장 (.svg 확장자 사용)
string svgOutputPath = Path.ChangeExtension(outputPath, ".svg");
File.WriteAllBytes(svgOutputPath, imageData);
// 원래 경로 대신 SVG 경로를 반환하도록 outputPath 변수를 업데이트
File.Copy(svgOutputPath, outputPath, true);
}
else
{
// 기존 비트맵 처리 코드
using var ms = new MemoryStream(imageData);
using var bitmap = SKBitmap.Decode(ms);
if (bitmap != null)
{
using var image = SKImage.FromBitmap(bitmap);
using var data = image.Encode(SKEncodedImageFormat.Png, 100);
using var fs = File.OpenWrite(outputPath);
data.SaveTo(fs);
}
}
}
catch (Exception ex)