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