Fix page dimensions when a manual rotation is applied
This commit is contained in:
@@ -27,10 +27,11 @@ fun interface JpegProvider {
|
||||
}
|
||||
|
||||
data class PageToExport(
|
||||
val metadata: PageMetadata?,
|
||||
val page: ScanPage,
|
||||
val jpeg: JpegProvider,
|
||||
) {
|
||||
fun estimatedDimensions(): EstimatedDimensions? {
|
||||
val metadata = page.metadata
|
||||
if (metadata == null)
|
||||
return null
|
||||
val size = metadata.sourceSize
|
||||
@@ -40,7 +41,7 @@ data class PageToExport(
|
||||
val realDimensions = estimateRealDimensions(
|
||||
quad, size.width.toInt(), size.height.toInt(), metadata.opticalMeasures
|
||||
).snapToStandardFormat()
|
||||
return realDimensions.applyRotation(metadata.baseRotation)
|
||||
return realDimensions.applyRotation(page.totalRotation())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,11 +61,11 @@ suspend fun pagesToExport(
|
||||
val pages = imageRepository.pages()
|
||||
return when (exportQuality) {
|
||||
ExportQuality.BALANCED -> pages.map {
|
||||
PageToExport(it.metadata) { jpeg(it, imageRepository) }
|
||||
PageToExport(it) { jpeg(it, imageRepository) }
|
||||
}
|
||||
|
||||
ExportQuality.LOW -> pages.map { page ->
|
||||
PageToExport(page.metadata) {
|
||||
PageToExport(page) {
|
||||
resizeJpegBytesForMaxPixels(
|
||||
jpeg = jpeg(page, imageRepository),
|
||||
maxPixels = exportQuality.maxPixels.toDouble(),
|
||||
@@ -74,7 +75,7 @@ suspend fun pagesToExport(
|
||||
}
|
||||
|
||||
ExportQuality.HIGH -> pages.map { page ->
|
||||
PageToExport(page.metadata) {
|
||||
PageToExport(page) {
|
||||
val source = imageRepository.source(page.id)
|
||||
val metadata = page.metadata
|
||||
val colorMode = page.colorMode
|
||||
|
||||
@@ -18,6 +18,8 @@ import kotlinx.coroutines.test.runTest
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.fairscan.app.domain.Jpeg
|
||||
import org.fairscan.app.domain.PageToExport
|
||||
import org.fairscan.app.domain.Rotation
|
||||
import org.fairscan.app.domain.ScanPage
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import java.io.OutputStream
|
||||
@@ -81,7 +83,7 @@ class FileManagerTest {
|
||||
}
|
||||
val manager = FileManager(pdfDir, externalDir, fakePdfWriter)
|
||||
val pages = listOf(byteArrayOf(0x01, 0x02), byteArrayOf(0x11))
|
||||
.map { PageToExport(null) { Jpeg(it) } }
|
||||
.map { PageToExport(ScanPage("1", Rotation.R0, null, 1, null)) { Jpeg(it) } }
|
||||
val pdf = manager.generatePdf(pages)
|
||||
assertThat(pdf.pageCount).isEqualTo(2)
|
||||
assertThat(pdf.sizeInBytes).isEqualTo(3)
|
||||
|
||||
Reference in New Issue
Block a user