نوری نستعلیق کرننگ پر کام!

آپکی اطلاع کیلئے عرض ہے کہ یہ حروف کہلاتے ہیں :)

مطلب یہ تھا کہ حروف کو چھوڑ کر باقی فانٹ میں انپیج جیسی کرننگ حاصل ہو رہی ہے۔ اب ظاہر نتائج کو بہتر سے بہترین کرتے کچھ وقت تو لگے گا۔ یہاں سب سے کٹھن مرحلہ مائکروسافٹ وولٹ سے فانٹ کو کمپائل کروانا تھا۔ یہ سنگ میل یکم ستمبر 2015 کو پار ہوا۔ باقی نتائج کے لئے انتظارفرمائیں :)

اللہ تعالیٰ آپ کو ہمت حوصلہ صحت اور آسانیاں عطا فرمائے۔
 
آخری تدوین:

mohdumar

محفلین
جناب! تمام ترسیموں کی اونچائی ماپنے کیلئے جن جناتی الگوردھمز کا آپنے تذکرہ کیا ہے وہ درحقیقت Matlab نامی امیج پراسیسنگ ٹول کے اندر کام کرتی ہیں۔ میرا نہیں خیال کہ انہیں کسی طور پر بھی اس سافٹوئیر سے باہر استعمال کیا جا سکے گا۔ باقی انکی پورٹ ابلٹی سے متعلق تفاصیل سید ذیشان بھائی بہتر بتا سکیں گے۔

Matlab اور Mathematica سافٹویئر اپنے کمپائلر اور runtime بھی دستیاب کرتے ہیں جن کی مدد سے پورٹیبل اطلاقیہ بنانا آسان ہونا چائیے.
 

arifkarim

معطل
اگرچہ یہ کافی خوش آئند ہے کہ اس قسم کی کرننک ہو رہی ہے لیکن جب تک الفاظ کے اندر کی کرننگ سپیس کے مقابلے کی نہیں ہو جاتی، تب تک فانٹ کو ریلیز نہیں کرنا چاہیے۔ اس کی مثال لفظ کرننگ ہے۔جس سے صاف ظاہر ہوتا ہے کہ کرننگ درست نہیں ہے۔
امید ہے اس کا بھی جلد حل نکل آئے گا۔ :)
جناب! گروپ اور پیئر کرننگ میں یہی فرق ہے کہ گروپ کرننگ اسپیس کیساتھ کی جاتی ہے جبکہ پیئر کرننگ حروف و ترسیموں کے ساتھ۔ ہمارا بنیادی حدف اسپیس کیساتھ کرننگ تو حل ہو چکا۔ اب ہم اسی فانٹ کے ساتھ mohdumar بھائی کے فراہم کر دہ کرننگ ٹیبلز کو ایڈجسٹ کرنے کی کوشش کرتے ہیں تاکہ اندرون الفاظ کرننگ مزید بہتر ہو سکے۔
 

آصف اثر

معطل
آج مجھےآفس 2013 سے پرنٹ کیے گیے ایک صفحہ سے پتا چلاکہ کرننگ کا یہ مسئلہ انڈیزائن یا آفس کا نہیں بلکہ جمیل نوری نستعلیق فانٹ کا اپنا ہے۔ آفس میں بھی وہی ”ر، د، و، ڑ“ وغیرہ کا مسئلہ نظر آیا۔ امید ہے آپ سب کی محنت سے جمیل نستعلیق کا یہ مسئلہ جلد حل ہوجائے گا۔
 

mohdumar

محفلین
آج مجھےآفس 2013 سے پرنٹ کیے گیے ایک صفحہ سے پتا چلاکہ کرننگ کا یہ مسئلہ انڈیزائن یا آفس کا نہیں بلکہ جمیل نوری نستعلیق فانٹ کا اپنا ہے۔ آفس میں بھی وہی ”ر، د، و، ڑ“ وغیرہ کا مسئلہ نظر آیا۔ امید ہے آپ سب کی محنت سے جمیل نستعلیق کا یہ مسئلہ جلد حل ہوجائے گا۔
جناب پھر تو آپ یہ بات بہت دیر سے سمجھےلیکن وہ کہتے ہیں نا دیر آئے درست آئے۔
 

سید ذیشان

محفلین
جناب! تمام ترسیموں کی اونچائی ماپنے کیلئے جن جناتی الگوردھمز کا آپنے تذکرہ کیا ہے وہ درحقیقت Matlab نامی امیج پراسیسنگ ٹول کے اندر کام کرتی ہیں۔ میرا نہیں خیال کہ انہیں کسی طور پر بھی اس سافٹوئیر سے باہر استعمال کیا جا سکے گا۔ باقی انکی پورٹ ابلٹی سے متعلق تفاصیل سید ذیشان بھائی بہتر بتا سکیں گے۔

انکو بالکل استعمال کیا جا سکتا ہے matlab سے باہر بھی۔

۠۠ع
مگر اس میں لگتی ہے محنت زیادہ
 

سید ذیشان

محفلین
مزید یہ کہ مذکورہ جناتی الگورتھمز کو ایک ایپلیکیشن کا حصہ ہونا چاہیے تاکہ اور لوگ بھی اسے اپنے فونٹ کی کرننگ نکالنے کے لیے استعمال کر سکیں۔ جمیل نوری نستعلیق کی کرننگ کے حصول کے بعد ایک عدد ٹیوٹوریل کے ہمراہ اس ایپلیکیشن کی ریلیز ایک بڑا سنگ میل ہو گی جس سے سعد نستعلیق، عماد نستعلیق کے لگیچر ورژن اور دیگر مقبول حرفی نستعلیق فانٹس کے لگیچر ورژنز بنا کر ان میں کرننگ ممکن ہو سکے گی۔

یہ رہا اونچائی نکالنے کا کوڈ جو کل 100 لائنوں پر مشتمل ہے۔

کوڈ:
scaling = 5;
nbins = 11;
shiftX = 100;

directory_name = 'C:\kerning\JNN';
files = dir(directory_name);

fileIndex = find(~[files.isdir]);

for i = 1:length(fileIndex)
    fileName{i} = files(fileIndex(i)).name;
end

cd(directory_name);
fileID{1} = fopen('C:\kerning\0_shift.txt','w');
fileID{2} = fopen('C:\kerning\100_shift.txt','w');
fileID{3} = fopen('C:\kerning\200_shift.txt','w');
fileID{4} = fopen('C:\kerning\300_shift.txt','w');
fileID{5} = fopen('C:\kerning\400_shift.txt','w');
fileID{6} = fopen('C:\kerning\500_shift.txt','w');
fileID{7} = fopen('C:\kerning\600_shift.txt','w');
fileID{8} = fopen('C:\kerning\700_shift.txt','w');
fileID{9} = fopen('C:\kerning\800_shift.txt','w');
fileID{10} = fopen('C:\kerning\900_shift.txt','w');
fileID{11} = fopen('C:\kerning\1000_shift.txt','w');





for ind = 1:length(fileIndex)
    y = imread(fileName{ind});
%     y = imread('li.png');
   
    [L W] = size(y);
   
    m = ones(L,W);
    xx = xor(y,m);
    y = bwconvhull(xx,'union');
   
    %     imshow(y);
    %     pause;
   
   
    divisor = fix(shiftX/scaling);
    nW = fix(W/divisor);
   
    if(nW > nbins)
        nW = nbins;
    end
   
   
    starting = ones(nW,L);
    ending = ones(nW,L);
    start_h = zeros(1,11);
    end_h = L*ones(1,11);
    for j = 1:nW
        for i = 0:2
            starting(j,:) = starting(j,:) & y(:,end - (j-1)*divisor - i)';
            ending(j,:) = ending(j,:) & y(:,i+1 + (j-1)*divisor)';
        end
    end
    for j = 1:nW
        start_h(j) = find(starting(j,:) == 1, 1, 'last' );
        if(isempty(start_h(j)))
            start_h(j) = -1;
        else
            start_h(j) = L - start_h(j);
        end
        end_h(j) = find(ending(j,:) == 1, 1 );
        if(isempty(end_h(j)))
            end_h(j) = -1;
        else
            end_h(j) = L - end_h(j);
        end
    end
    %
    diff_start = start_h(1:end-1) - start_h(2:end);
    diff_end= end_h(1:end-1) - end_h(2:end);
    st = find(diff_start < 0,1);
    if(~isempty(st))
        start_h(st+1:nW) = start_h(st);
    end
    en = find(diff_end > 0,1);
    if(~isempty(en))
        end_h(en+1:nW) = end_h(en);
    end
   
    name = fileName{ind}(1:end-4);
    for j = 1:11
         R{ind}{1} = name;
         R{ind}{2}{j} = [fix(scaling*start_h(j)) ; fix(scaling*end_h(j))];
    end
    for j = 1:11
        fprintf(fileID{j},'%s\t',name);
        fprintf(fileID{j},'%d\t%d',fix(scaling*start_h(j)),fix(scaling*end_h(j)));
        fprintf(fileID{j},'\n');
    end
   
%     imshow(y);
%     hold on;
%     plot(W - (0:nW-1)*divisor,L - start_h(1:nW),'rd');
%     plot((0:nW-1)*divisor,L - end_h(1:nW),'gd');
%    
%     hold off;
%    
   
    ind
end
for j = 1:11
    fclose(fileID{j});
end
 

arifkarim

معطل
یہ رہا اونچائی نکالنے کا کوڈ جو کل 100 لائنوں پر مشتمل ہے۔
زبردست! اب ذرا کسی ایک ترسیمہ پر اسکو اپلائی کرنے کے بعد کا نظارہ بھی ہو جائے۔ تاکہ ٹائپوگرافی سے نابلد افراد کو بھی معلوم ہو سکے کہ آخر یہ جناتی کوڈ عملی طور پر کرتا کیا ہے :)
 

آصف اثر

معطل
جناب پھر تو آپ یہ بات بہت دیر سے سمجھےلیکن وہ کہتے ہیں نا دیر آئے درست آئے۔
دراصل اس سے پہلے انڈیزائن میں جمیل نوری نستعلیق کی کرننگ کی لڑی زیرِ مطالعہ رہی لہذا تحت الشعور پر انڈیزائن +جمیل نستعلیق+ کرننگ کا ایسا چھاپ لگا کہ اب کہیں جاکر دھل گیا ہے۔:)
 

شاکرالقادری

لائبریرین
یہ رہا اونچائی نکالنے کا کوڈ جو کل 100 لائنوں پر مشتمل ہے۔

کوڈ:
scaling = 5;
nbins = 11;
shiftX = 100;

directory_name = 'C:\kerning\JNN';
files = dir(directory_name);

fileIndex = find(~[files.isdir]);

for i = 1:length(fileIndex)
    fileName{i} = files(fileIndex(i)).name;
end

cd(directory_name);
fileID{1} = fopen('C:\kerning\0_shift.txt','w');
fileID{2} = fopen('C:\kerning\100_shift.txt','w');
fileID{3} = fopen('C:\kerning\200_shift.txt','w');
fileID{4} = fopen('C:\kerning\300_shift.txt','w');
fileID{5} = fopen('C:\kerning\400_shift.txt','w');
fileID{6} = fopen('C:\kerning\500_shift.txt','w');
fileID{7} = fopen('C:\kerning\600_shift.txt','w');
fileID{8} = fopen('C:\kerning\700_shift.txt','w');
fileID{9} = fopen('C:\kerning\800_shift.txt','w');
fileID{10} = fopen('C:\kerning\900_shift.txt','w');
fileID{11} = fopen('C:\kerning\1000_shift.txt','w');





for ind = 1:length(fileIndex)
    y = imread(fileName{ind});
%     y = imread('li.png');
  
    [L W] = size(y);
  
    m = ones(L,W);
    xx = xor(y,m);
    y = bwconvhull(xx,'union');
  
    %     imshow(y);
    %     pause;
  
  
    divisor = fix(shiftX/scaling);
    nW = fix(W/divisor);
  
    if(nW > nbins)
        nW = nbins;
    end
  
  
    starting = ones(nW,L);
    ending = ones(nW,L);
    start_h = zeros(1,11);
    end_h = L*ones(1,11);
    for j = 1:nW
        for i = 0:2
            starting(j,:) = starting(j,:) & y(:,end - (j-1)*divisor - i)';
            ending(j,:) = ending(j,:) & y(:,i+1 + (j-1)*divisor)';
        end
    end
    for j = 1:nW
        start_h(j) = find(starting(j,:) == 1, 1, 'last' );
        if(isempty(start_h(j)))
            start_h(j) = -1;
        else
            start_h(j) = L - start_h(j);
        end
        end_h(j) = find(ending(j,:) == 1, 1 );
        if(isempty(end_h(j)))
            end_h(j) = -1;
        else
            end_h(j) = L - end_h(j);
        end
    end
    %
    diff_start = start_h(1:end-1) - start_h(2:end);
    diff_end= end_h(1:end-1) - end_h(2:end);
    st = find(diff_start < 0,1);
    if(~isempty(st))
        start_h(st+1:nW) = start_h(st);
    end
    en = find(diff_end > 0,1);
    if(~isempty(en))
        end_h(en+1:nW) = end_h(en);
    end
  
    name = fileName{ind}(1:end-4);
    for j = 1:11
         R{ind}{1} = name;
         R{ind}{2}{j} = [fix(scaling*start_h(j)) ; fix(scaling*end_h(j))];
    end
    for j = 1:11
        fprintf(fileID{j},'%s\t',name);
        fprintf(fileID{j},'%d\t%d',fix(scaling*start_h(j)),fix(scaling*end_h(j)));
        fprintf(fileID{j},'\n');
    end
  
%     imshow(y);
%     hold on;
%     plot(W - (0:nW-1)*divisor,L - start_h(1:nW),'rd');
%     plot((0:nW-1)*divisor,L - end_h(1:nW),'gd');
%   
%     hold off;
%   
  
    ind
end
for j = 1:11
    fclose(fileID{j});
end
سیدذیشان ! ہم جیسے لوگ جو پروگرامنگ سے نا بلد ہیں اور اس بات سے بھی آگاہ نہیں کہ اس سکرپٹ کو کس پروگرام کے ساتھ رن کیا جائے گا ۔۔۔ بس فونٹ سازی کی حد تک ہی محدود ہیں ۔۔۔ سو ہم جیسے لوگوں کے لیے ایک ایسے خود انحصار اطلاقیہ کی ضرورت ہے جس میں داخلی طور پر یہ کوڈ کام کرے لیکن اس کا یوزر انٹر فیس بہت سادہ سا ہو اور ہم اسے فہرست فراہم کریں ، مطلوبہ فونٹ کا نام دیں جس کے لگیچرز کی ویلیوز مطلوب ہوں تو یہ خود انحصار اطلاقیہ ویلیوز پر مبنی لسٹیں جنریٹ کر دے اگر ایسا ہو جائے تو یہ آئندہ فونٹ سازی میں استعمال ہونے والا ایک مستقل ٹول بن جائے گا اور ہم سب آپ کو دعائیں دیتے رہیں گے۔
 

arifkarim

معطل
آپ کی دیرینہ خواہش پوری ہو ہی گئی کہ convex hull طریقہ سے کرننگ حاصل کی جائے!
شکریہ جناب! دراصل convex hull والے آئیڈیے کے اصل مؤجد محترمی ابن سعید ہیں :)
اسکو مزید بہتر کر کے ہزاروں ترسیموں پہ عملی طور پر اپلائی کرنے کا کریڈٹ بہرحال ذیشان بھائی کو جاتا ہے۔

دراصل اس سے پہلے انڈیزائن میں جمیل نوری نستعلیق کی کرننگ کی لڑی زیرِ مطالعہ رہی لہذا تحت الشعور پر انڈیزائن +جمیل نستعلیق+ کرننگ کا ایسا چھاپ لگا کہ اب کہیں جاکر دھل گیا ہے۔:)
ضرورت اپنی اپنی۔ انڈیزائن چونکہ پرنٹ پبلشنگ کا بے تاج بادشاہ ہے تو وہاں یہ کام ایک پلگ ان کی صورت میں زیادہ بہتر انداز میں ہو سکتاہے۔ جبکہ ہمارا طریقہ یونی ورسلی ہر جگہ اپلائی ہوگا۔
 

دوست

محفلین
اگر یہ الگورتھم باہر نہیں بھی لکھے جا سکتے یا میٹ لیب کے اندرونی فیچرز کے استعمال کی وجہ سے کم سے کم لائنوں میں زیادہ سے زیادہ نتائج دے رہے ہیں جو کسی اور پروگرامنگ زبان میں ممکن نہیں تو ٹیوٹوریل میں ان کو میٹ لیب میں رن کرنے کا طریقہ تو شامل ہو ہی سکتا ہے۔ لیکن اس کے لیے میٹ لیب کا مفت ہونا ضروری ہے تاکہ ہر کوئی بلا رکاوٹ اسے ڈاؤنلوڈ تو کر لے۔ لیکن یہ مفت لگ نہیں رہا۔ اور اس کا اوپن سورس متبادل یقیناً اس جیسا کام نہیں کر پائے گا۔ اگر کرے بھی تو اس کا کام کرنے کا طریقہ اس سے مختلف ہو گا۔ فوٹو شاپ کا متبادل گمپ، مائیکروسافٹ آفس کا متبادل اوپن/لبرے آفس اور اس جیسے کئی مفت متبادل ڈھونڈنے کے حوالے سے یہ ذاتی تجربہ ہے کہ ایک تجارتی سافٹویئر کا آزاد اور مفت متبادل کبھی بھی اس کا سو فیصد متبادل نہیں ہوتا۔
 
آخری تدوین:

arifkarim

معطل
اس کے لیے میٹ لیب کا مفت ہونا ضروری ہے تاکہ ہر کوئی بلا رکاوٹ اسے ڈاؤنلوڈ تو کر لے۔ لیکن یہ مفت لگ نہیں رہا۔
مفتی سے زیادہ بڑی رکاوٹ اسکا حجم ہے۔ ہم نے کچھ ماہ قبل convex hull پر تجربات کے سلسلہ میں اسے ڈاؤنلوڈ کیا تھا تو یہ بڑے آرام سے 6 سے 7 گیگا بائٹ لے اڑا تھا :)
کم از کم پاکستان کی حد تک اسے عام ڈاؤنلوڈ کرنا مشکل ہوگا۔۔۔
 

سید ذیشان

محفلین
زبردست! اب ذرا کسی ایک ترسیمہ پر اسکو اپلائی کرنے کے بعد کا نظارہ بھی ہو جائے۔ تاکہ ٹائپوگرافی سے نابلد افراد کو بھی معلوم ہو سکے کہ آخر یہ جناتی کوڈ عملی طور پر کرتا کیا ہے :)

اصل حرف
noon.png



اس کی اونچائی ابتدا اور آخر سے

height.png
 

آصف اثر

معطل
مفتی سے زیادہ بڑی رکاوٹ اسکا حجم ہے۔ ہم نے کچھ ماہ قبل convex hull پر تجربات کے سلسلہ میں اسے ڈاؤنلوڈ کیا تھا تو یہ بڑے آرام سے 6 سے 7 گیگا بائٹ لے اڑا تھا :)
کم از کم پاکستان کی حد تک اسے عام ڈاؤنلوڈ کرنا مشکل ہوگا۔۔۔
عام سے مراد عوام؟
یعنی فونٹ استعمال کرنے والوں کو بھی اسے ڈاؤنلوڈ کرنا پڑے گا؟
 

arifkarim

معطل
جو طریقہ آپ کے مطابق کسی نے پیٹنٹ کروایا ہوا ہے ۔ تو اگر ہم اس کا استعمال کریں گے تو پیٹنٹ کے پیسے بھی بھرنے ہوں گے۔ :)
سب سے پہلے تو نوری نستعلیق ترسیموں کے استعمال کا "پیٹنٹ" ادا کریں ۔ پھر اس والے کو بھی دیکھ لیں گے:
https://www.google.com/patents/US6829748
 
Top