diff --git a/components/converter/ConversionPreview.tsx b/components/converter/ConversionPreview.tsx index 93d0721..5044471 100644 --- a/components/converter/ConversionPreview.tsx +++ b/components/converter/ConversionPreview.tsx @@ -46,12 +46,17 @@ export function ConversionPreview({ job, onDownload }: ConversionPreviewProps) { // Create preview URL for result React.useEffect(() => { if (job.result && job.status === 'completed') { + console.log('[Preview] Creating object URL for blob'); const url = URL.createObjectURL(job.result); setPreviewUrl(url); + console.log('[Preview] Object URL created:', url); return () => { + console.log('[Preview] Revoking object URL:', url); URL.revokeObjectURL(url); }; + } else { + setPreviewUrl(null); } }, [job.result, job.status]); diff --git a/lib/converters/imagemagickService.ts b/lib/converters/imagemagickService.ts index c50872a..1d12160 100644 --- a/lib/converters/imagemagickService.ts +++ b/lib/converters/imagemagickService.ts @@ -85,6 +85,10 @@ export async function convertWithImageMagick( quality: options.imageQuality, }); + // Verify the data looks like valid image data by checking magic bytes + const first4Bytes = Array.from(result.slice(0, 4)).map(b => b.toString(16).padStart(2, '0')).join(' '); + console.log('[ImageMagick] First 4 bytes:', first4Bytes); + // Create blob from result const mimeType = getMimeType(outputFormat); const blob = new Blob([result as BlobPart], { type: mimeType }); @@ -94,6 +98,25 @@ export async function convertWithImageMagick( type: blob.type, }); + // Verify blob can be read + try { + const testReader = new FileReader(); + const testPromise = new Promise((resolve) => { + testReader.onloadend = () => { + if (testReader.result instanceof ArrayBuffer) { + const testArr = new Uint8Array(testReader.result); + console.log('[ImageMagick] Blob verification - first 4 bytes:', + Array.from(testArr.slice(0, 4)).map(b => b.toString(16).padStart(2, '0')).join(' ')); + } + resolve(true); + }; + }); + testReader.readAsArrayBuffer(blob.slice(0, 4)); + await testPromise; + } catch (err) { + console.error('[ImageMagick] Blob verification failed:', err); + } + if (onProgress) onProgress(100); const duration = Date.now() - startTime;