صورة ← حبر ← كتاب

صفحة طباعة دقيقة من صورتك الأصلية.

اضبط الشبكة، افحص الصفحة، ثم صدّر داخل الكتاب. تبقى الصور والمعالجة داخل متصفحك.

المعالجة محلية
PUZZLE PAGE · 8.5 × 11 IN44 COLUMNS · 6 MARKS
جارٍ تجهيز PDF…
// طبعة الحل: نقاط دقيقة بكتل داكنة متماسكة في أعلى الدرجات، لا مربعات ولا خطوط متصلة. function drawSolutionMark(ctx,cx,cy,step,level,levels){const q=Math.max(1,Math.min(5,Math.ceil(level/levels*5))),patterns=[[[0,0,.45]],[[-.18,-.13,.42],[.18,.13,.42]],[[-.20,-.18,.39],[.20,-.18,.39],[0,.20,.42]],[[-.20,-.20,.37],[.20,-.20,.37],[-.20,.20,.37],[.20,.20,.37],[0,0,.40]],[[-.25,-.25,.35],[0,-.25,.35],[.25,-.25,.35],[-.25,0,.35],[0,0,.39],[.25,0,.35],[-.25,.25,.35],[0,.25,.35],[.25,.25,.35]]],dots=patterns[q-1],radius=Math.max(.46,step*.16);for(const [dx,dy,weight] of dots){ctx.beginPath();ctx.arc(cx+dx*step,cy+dy*step,Math.max(.40,radius*weight/.39),0,Math.PI*2);ctx.fill()}} function drawSolutionSymbolField(ctx,d,s,source,pageNo){const {w,h,k}=d;paperBase(ctx,w,h,s);const label=s.lang==='ar'?'الحل':'Solution';text(ctx,`${label} — ${String(pageNo).padStart(2,'0')}`,w/2,h*.057,11*k,{align:'center',weight:'700'});const dim=sourceDims(source),maxW=w*.82,maxH=h*.83,scale=Math.min(maxW/dim.w,maxH/dim.h),iw=Math.max(1,Math.round(dim.w*scale)),ih=Math.max(1,Math.round(dim.h*scale)),ix=Math.round((w-iw)/2),iy=Math.round(Math.max(h*.105,(h-ih)/2+h*.035)),levels=Math.max(4,Math.min(6,s.levels)),cols=Math.max(112,Math.min(156,Math.round(s.cols*2.35))),rows=Math.max(1,Math.round(cols*ih/iw)),toneData=pixels({...s,levels,detail:Math.max(.9,s.detail??1),contrast:Math.min(1.16,Math.max(.98,s.contrast??1))},cols,rows,source),cellW=iw/cols,cellH=ih/rows;ctx.save();ctx.fillStyle='#111';for(let r=0;r