Merge pull request #551 from fnatzke/Issue549

Fix for Issue#549. Skip over Jpg segments rather than use bruce force…
This commit is contained in:
Eliot Jones 2023-02-18 10:50:44 +00:00 committed by GitHub
commit 999f9ee7dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 7 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@ -0,0 +1,38 @@
namespace UglyToad.PdfPig.Tests.Images
{
using System;
using System.IO;
using Xunit;
using JpegHandler = UglyToad.PdfPig.Images.JpegHandler;
public class JpegHandlerTests
{
[Fact]
public void CanGetJpegInformation()
{
var dataJpg = LoadJpg("218995467-ccb746b0-dc28-4616-bcb1-4ad685f81876.jpg");
using (var ms = new MemoryStream(dataJpg))
{
var jpegInfo = JpegHandler.GetInformation(ms);
Assert.Equal(8, jpegInfo.BitsPerComponent);
Assert.Equal(2290, jpegInfo.Height);
Assert.Equal(1648, jpegInfo.Width);
}
}
private static byte[] LoadJpg(string name)
{
var baseFolder = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory);
var JpgFilesFolder = Path.Combine(baseFolder, "..", "..", "..", "Images", "Files", "Jpg"); ;
var JpgFilePath = Path.Combine(JpgFilesFolder, name);
return File.ReadAllBytes(JpgFilePath);
}
}
}

View File

@ -133,9 +133,4 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Images\" />
<Folder Include="Images\Files\" />
</ItemGroup>
</Project>

View File

@ -1,6 +1,6 @@
namespace UglyToad.PdfPig.Images
{
using System;
using System;
using System.IO;
internal static class JpegHandler
@ -28,6 +28,19 @@
{
switch (marker)
{
case JpegMarker.StartOfImage:
case JpegMarker.EndOfImage:
case JpegMarker.Restart0:
case JpegMarker.Restart1:
case JpegMarker.Restart2:
case JpegMarker.Restart3:
case JpegMarker.Restart4:
case JpegMarker.Restart5:
case JpegMarker.Restart6:
case JpegMarker.Restart7:
// No length markers
break;
case JpegMarker.StartOfBaselineDctFrame:
case JpegMarker.StartOfProgressiveDctFrame:
{
@ -55,6 +68,7 @@
case JpegMarker.ApplicationSpecific13:
case JpegMarker.ApplicationSpecific14:
case JpegMarker.ApplicationSpecific15:
default:
{
var length = ReadShort(stream, shortBuffer);
stream.Seek(length - 2, SeekOrigin.Current);
@ -105,7 +119,7 @@
}
if (previous.HasValue && previous.Value == MarkerStart && b != MarkerStart)
{
{
return b;
}