Make to make text size auto adjust to an image with PIL





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I am trying to get some text to overlap on an image, which is I have the following code for.



from PIL import Image, ImageDraw, ImageFont

msg = "This is a test phrase, so please shrink the text."

im = Image.open("test.jpg")
draw = ImageDraw.Draw(im)

W, H = im.size

myFont =
ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf")

w, h = draw.textsize(msg, font=myFont)
draw.text(((W-w)/2,(H-h)/2), msg, fill="black", font=myFont)

im.save("sample-out.png", "PNG")


What I need is the text to scale in the middle, but between the pixel width and height of 1600,300. Whichever one it achieve first.



I imagine it has something to do with fontsize increasing, but I can't figure it out.










share|improve this question





























    0















    I am trying to get some text to overlap on an image, which is I have the following code for.



    from PIL import Image, ImageDraw, ImageFont

    msg = "This is a test phrase, so please shrink the text."

    im = Image.open("test.jpg")
    draw = ImageDraw.Draw(im)

    W, H = im.size

    myFont =
    ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf")

    w, h = draw.textsize(msg, font=myFont)
    draw.text(((W-w)/2,(H-h)/2), msg, fill="black", font=myFont)

    im.save("sample-out.png", "PNG")


    What I need is the text to scale in the middle, but between the pixel width and height of 1600,300. Whichever one it achieve first.



    I imagine it has something to do with fontsize increasing, but I can't figure it out.










    share|improve this question

























      0












      0








      0








      I am trying to get some text to overlap on an image, which is I have the following code for.



      from PIL import Image, ImageDraw, ImageFont

      msg = "This is a test phrase, so please shrink the text."

      im = Image.open("test.jpg")
      draw = ImageDraw.Draw(im)

      W, H = im.size

      myFont =
      ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf")

      w, h = draw.textsize(msg, font=myFont)
      draw.text(((W-w)/2,(H-h)/2), msg, fill="black", font=myFont)

      im.save("sample-out.png", "PNG")


      What I need is the text to scale in the middle, but between the pixel width and height of 1600,300. Whichever one it achieve first.



      I imagine it has something to do with fontsize increasing, but I can't figure it out.










      share|improve this question














      I am trying to get some text to overlap on an image, which is I have the following code for.



      from PIL import Image, ImageDraw, ImageFont

      msg = "This is a test phrase, so please shrink the text."

      im = Image.open("test.jpg")
      draw = ImageDraw.Draw(im)

      W, H = im.size

      myFont =
      ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf")

      w, h = draw.textsize(msg, font=myFont)
      draw.text(((W-w)/2,(H-h)/2), msg, fill="black", font=myFont)

      im.save("sample-out.png", "PNG")


      What I need is the text to scale in the middle, but between the pixel width and height of 1600,300. Whichever one it achieve first.



      I imagine it has something to do with fontsize increasing, but I can't figure it out.







      python python-imaging-library






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 4 at 0:16









      Luke AppelLuke Appel

      115




      115
























          1 Answer
          1






          active

          oldest

          votes


















          0














          So figured it out with a bit of luck, here is the below code. Please note that some variables changed names from the original code above, but this works.



          from PIL import ImageFont, ImageDraw, Image

          image = Image.open('test.jpg')
          draw = ImageDraw.Draw(image)
          txt = "share/fonts/truetype/customfonts/KeepC"
          fontsize = 1 # starting font size

          W, H = image.size

          # portion of image width you want text width to be
          blank = Image.new('RGB',(1000, 300))


          font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)
          print image.size
          print blank.size

          while (font.getsize(txt)[0] < blank.size[0]) and (font.getsize(txt)[1] < blank.size[1]):
          # iterate until the text size is just larger than the criteria
          fontsize += 1
          font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

          # optionally de-increment to be sure it is less than criteria
          fontsize -= 1
          font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

          w, h = draw.textsize(txt, font=font)

          print 'final font size',fontsize
          draw.text(((W-w)/2,(H-h)/2), txt, font=font, fill="black") # put the text on the image
          image.save('sample-out.png') # save it





          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54031588%2fmake-to-make-text-size-auto-adjust-to-an-image-with-pil%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            So figured it out with a bit of luck, here is the below code. Please note that some variables changed names from the original code above, but this works.



            from PIL import ImageFont, ImageDraw, Image

            image = Image.open('test.jpg')
            draw = ImageDraw.Draw(image)
            txt = "share/fonts/truetype/customfonts/KeepC"
            fontsize = 1 # starting font size

            W, H = image.size

            # portion of image width you want text width to be
            blank = Image.new('RGB',(1000, 300))


            font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)
            print image.size
            print blank.size

            while (font.getsize(txt)[0] < blank.size[0]) and (font.getsize(txt)[1] < blank.size[1]):
            # iterate until the text size is just larger than the criteria
            fontsize += 1
            font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

            # optionally de-increment to be sure it is less than criteria
            fontsize -= 1
            font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

            w, h = draw.textsize(txt, font=font)

            print 'final font size',fontsize
            draw.text(((W-w)/2,(H-h)/2), txt, font=font, fill="black") # put the text on the image
            image.save('sample-out.png') # save it





            share|improve this answer




























              0














              So figured it out with a bit of luck, here is the below code. Please note that some variables changed names from the original code above, but this works.



              from PIL import ImageFont, ImageDraw, Image

              image = Image.open('test.jpg')
              draw = ImageDraw.Draw(image)
              txt = "share/fonts/truetype/customfonts/KeepC"
              fontsize = 1 # starting font size

              W, H = image.size

              # portion of image width you want text width to be
              blank = Image.new('RGB',(1000, 300))


              font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)
              print image.size
              print blank.size

              while (font.getsize(txt)[0] < blank.size[0]) and (font.getsize(txt)[1] < blank.size[1]):
              # iterate until the text size is just larger than the criteria
              fontsize += 1
              font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

              # optionally de-increment to be sure it is less than criteria
              fontsize -= 1
              font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

              w, h = draw.textsize(txt, font=font)

              print 'final font size',fontsize
              draw.text(((W-w)/2,(H-h)/2), txt, font=font, fill="black") # put the text on the image
              image.save('sample-out.png') # save it





              share|improve this answer


























                0












                0








                0







                So figured it out with a bit of luck, here is the below code. Please note that some variables changed names from the original code above, but this works.



                from PIL import ImageFont, ImageDraw, Image

                image = Image.open('test.jpg')
                draw = ImageDraw.Draw(image)
                txt = "share/fonts/truetype/customfonts/KeepC"
                fontsize = 1 # starting font size

                W, H = image.size

                # portion of image width you want text width to be
                blank = Image.new('RGB',(1000, 300))


                font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)
                print image.size
                print blank.size

                while (font.getsize(txt)[0] < blank.size[0]) and (font.getsize(txt)[1] < blank.size[1]):
                # iterate until the text size is just larger than the criteria
                fontsize += 1
                font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

                # optionally de-increment to be sure it is less than criteria
                fontsize -= 1
                font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

                w, h = draw.textsize(txt, font=font)

                print 'final font size',fontsize
                draw.text(((W-w)/2,(H-h)/2), txt, font=font, fill="black") # put the text on the image
                image.save('sample-out.png') # save it





                share|improve this answer













                So figured it out with a bit of luck, here is the below code. Please note that some variables changed names from the original code above, but this works.



                from PIL import ImageFont, ImageDraw, Image

                image = Image.open('test.jpg')
                draw = ImageDraw.Draw(image)
                txt = "share/fonts/truetype/customfonts/KeepC"
                fontsize = 1 # starting font size

                W, H = image.size

                # portion of image width you want text width to be
                blank = Image.new('RGB',(1000, 300))


                font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)
                print image.size
                print blank.size

                while (font.getsize(txt)[0] < blank.size[0]) and (font.getsize(txt)[1] < blank.size[1]):
                # iterate until the text size is just larger than the criteria
                fontsize += 1
                font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

                # optionally de-increment to be sure it is less than criteria
                fontsize -= 1
                font = ImageFont.truetype("/usr/share/fonts/truetype/customfonts/KeepCalm-Medium.ttf", fontsize)

                w, h = draw.textsize(txt, font=font)

                print 'final font size',fontsize
                draw.text(((W-w)/2,(H-h)/2), txt, font=font, fill="black") # put the text on the image
                image.save('sample-out.png') # save it






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 4 at 2:23









                Luke AppelLuke Appel

                115




                115
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54031588%2fmake-to-make-text-size-auto-adjust-to-an-image-with-pil%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas