February 11, 2014

HTML5 Canvas: Offscreen Rendering

Offscreen Rendering

Introduction

This post is part of a series about HTML5 Canvas. In this article I talk about "offscreen rendering" and an useful application for this technique: The Spritebuffer. The two important methods for offscreen rendering are context.getImageData() and context.putImageData().

What means offscreen rendering?

As the name says, it is about rendering content somewhere, but the screen. That "somewhere" means the memory. So, we are able to render graphics to the memory. Another term often used for this technique is "pre-rendering". In general, this technique is used to improve the visual experience (by reactivity and runtime performance), as rendering to memory is much faster than rendering to screen; especially when using context.drawImage() as shown at JsPerf.

How can I apply offscreen rendering?

A visual rendering applies for canvas elements which are embedded in the DOM only. Canvas elements that are not linked into the DOM can be used for offscreen rendering, as its content won't be visualized onto the screen. Therefore, to realize offscreen painting, simply create a canvas element dynamically without embedding it into the DOM. The following code demonstrates this simple technique.

<html>
    <head>
    <script type="application/javascript">        
        function main(){            
            // here we create an OFFSCREEN canvas
            var offscreenCanvas = document.createElement('canvas');
            offscreenCanvas.width = 300px;
            offscreenCanvas.height = 300px;
            var context = offscreenCanvas.getContext('2d');
            
            // draw something into the OFFSCREEN context
            context.fillRect(10,10,290,290);
            // ...
            
        }
    </script>
    </head>
    <body onload='main()'>
    </body>
</html>

Ok, I painted something into an offscreen canvas. And now?

Now, it gets interesting. We have painted something into an offscreen canvas and we want to use its content. The canvas API provides two functions to copy and paste image data from one canvas into another. While context.getImageData() fetches a rectangular area from a canvas, context.putImageData() pastes image data into a context. So, it is quite straightforward to copy image data from the offscreen canvas into the visual 'onscreen' canvas.

<html>
    <head>
    <script type="application/javascript">        
        function createOffscreenCanvas(){
            // here we create an OFFSCREEN canvas
            var offscreenCanvas = document.createElement('canvas');
            offscreenCanvas.width = 300px;
            offscreenCanvas.height = 300px;
            var context = offscreenCanvas.getContext('2d');
            
            // draw something into the OFFSCREEN context
            context.fillRect(10,10,280,280);
            // ...
        }    
            
            
        function copyIntoOnscreenCanvas(offscreenCanvas){
            var onscreenContext = document.getElementById('onscreen').getContext('2d');
            var offscreenContext = offscreenCanvas.getContext('2d');
            
            // cut the drawn rectangle
            var image = offscreenCanvas.getImageData(10,10,280,280); 
            // copy into visual canvas at different position
            onscreenContext.putImageData(image, 0, 0);
            
        }
            
        function main(){                        
            copyIntoOnscreenCanvas(createOffscreenCanvas());        
        }
    </script>
    </head>
    <body onload='main()'>
        <!-- this is the visual canvas -->
        <canvas id='onscreen' style='width:300px; height:300px'></canvas>
    </body>
</html>

Applying transformations on image data

Unfortunately, the image data pasted with putImageData() cannot be transformed with rotate(), scale(), translate(), setTransform(). The methods getImageData() and putImageData() are raw pixel operations for which no context state apply. To make the image data state aware, it is necessary to draw it into another (offscreen) canvas. This new canvas can be rendered with drawImageData(). Yes, you read correctly: drawImageData() also accepts a canvas object as argument.
The following code illustrates the copying technique.
function main(){
    loadImage("image.png");   
}

function loadImage(imgFile, onload){
    var img = new Image();
    img.onload = function() { exec(img); };
    img.src = imgFile;
}

function exec(imgData){
    
    // create offscreen image
    var imageCanvas = createOffscreenCanvas(imgData.width,imgData.height);    
    var imageContext = imageCanvas.getContext('2d');
    imageContext.drawImage(imgData, 0,0);
    
    // copy a part from image to subimage
    var w = 32; var h = 32;
    var subImageData = imageContext.getImageData(16,16,w,h);    
    var subImage = createOffscreenCanvas(w,h);
    var subImageContext = subImage.getContext('2d');
    subImageContext.putImageData(subImageData,0,0);
    
    paintScene(subImage);
    
}

function createOffscreenCanvas(width,height){
    var canvas = document.createElement('canvas');
    canvas.width = width;
    canvas.height = height;
    return canvas;
}


function paintScene(subImage){
    var onscreenContext =  document.getElementById('onscreen').getContext('2d');    
    
    // it is possible to use subImage as stamp
    onscreenContext.drawImage(subImage,32,64);
    onscreenContext.drawImage(subImage,96,64);
    
    // apply transformation 
    onscreenContext.save();
    onscreenContext.translate(80,80);
    onscreenContext.rotate(45 * (Math.PI/180));
    onscreenContext.translate(-80,-80);
    onscreenContext.drawImage(subImage,64,64);
    onscreenContext.restore();    
}
The rendered and visualized result may look like this.

Use case: Spritebuffer

A common use case for offscreen rendering is a spritebuffer. A sprite is a (movable) graphic object that is drawn over another graphics, e.g. background. Sprites are usually bundled in one or more images. The specific sprite is copied from that bundle to the canvas. As we want our sprite to be transformable we need to make our graphic object become a canvas first. The following code shows the implementation of a spritebuffer and its usage. The 'class' is ready to use and you may feel free to copy and reuse it.
var DEG2RAD = Math.PI/180.0;

function drawScene(imgSprite){    
    var spriteBuffer = new SpriteBuffer(imgSprite);    
    var context = document.getElementById('myCanvas').getContext('2d');
    
    var sprite = spriteBuffer.getSprite(0,0,32,32);
    context.rotate(45 * DEG2RAD);
    context.translate(100,100);    
    context.drawImage(sprite, 0, 0);
};

function loadImage(imageUrl, onload){
    var image = new Image();
    image.onload = function(){
        onload(image);        
    };
    this.image.src = imageUrl;
};

function main(){
    loadImage('./img/sprites.png', drawScene);
};
function SpriteBuffer(spriteImage) {        
        
    var imageBuffer;
    
    var initImageBuffer = function(spriteImage){
        var canvas = document.createElement('canvas');
        canvas.width = spriteImage.width;
        canvas.height = spriteImage.height;
        imageBuffer = canvas.getContext('2d');            
        imageBuffer.drawImage(spriteImage, 0, 0);
    };
    
    this.getSprite = function(x,y,w,h){
        var imgData = imageBuffer.getImageData(x,y,w,h);
        var sprite = document.createElement("canvas");
        sprite.width=w;
        sprite.height=h;            
        sprite.getContext('2d').putImageData(imgData, 0,0);
        return sprite;    
    };
    
    initImageBuffer(spriteImage);
};

172 comments:

  1. Very helpful tutorial. Very clear and step by step.

    ReplyDelete
  2. thank you, this is what I am looking for

    ReplyDelete
  3. Very informative post with the impressive details and practical examples towards your post. Thanks for these useful post.

    Advanced app development in coimbatore | Alternate mobile apps solutions

    ReplyDelete
  4. It's interesting that many of the bloggers your tips helped to clarify a few things for me as well as giving.. very specific nice content. And tell people specific ways to live their lives.Sometimes you just have to yell at people and give them a good shake to get your point across.School website design uk

    ReplyDelete
  5. Yes Very Clearly explained everything in this Post Step by Step . I made regular Visitor to this blog

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. I have a test canvas where I need to find the first pixel with different color.
    I go through canvas X/Y with for() loops an compare the colors.
    Comparing the time needed with offscreen canvas it is always (a little bit) slower.
    Reading your blog this result does not meet my expectation.
    Can you explain this behaviour?

    ReplyDelete
  8. Very nice post here thanks for it .I always like and such a nice contents of these post.
    thanks for sharing!!
    DevOps Online Training

    ReplyDelete
  9. مقالة رائعة جدا. شكرا لك نرجو أن تأتي لك كل الأشياء الجيدة. وداعا

    Bồn ngâm massage chân

    Bồn ngâm chân

    Có nên dùng bồn ngâm chân

    Cách sử dụng bồn ngâm chân

    ReplyDelete
  10. B'fhéidir gur earra maith é seo a léigh mé riamh. Go raibh maith agat as roinnt

    Giảo cổ lam hòa bình

    hat methi

    hạt methi

    hạt methi ấn độ

    ReplyDelete
  11. Waxaa laga yaabaa in tani ay tahay maqaal wanaagsan oo aan waligay arko. Waad ku mahadsan tahay wadaagista


    lưới chống chuột

    cửa lưới dạng xếp

    cửa lưới tự cuốn

    cửa lưới chống muỗi

    ReplyDelete
  12. Có lẽ cần phải trải qua tuổi thanh xuân mới có thể hiểu được( cách dạy bé học toán lớp 4 tuổi ) tuổi xuân là khoảng thời gian ta( dạy trẻ học toán tư duy ) sống ích kỷ biết chừng nào. Có lúc nghĩ, sở dĩ tình yêu cần phải đi một vòng tròn lớn như vậy, phải trả một cái giá quá đắt như thế,( phương pháp dạy toán cho trẻ mầm non ) là bởi vì nó đến không đúng thời điểm. Khi có được( Toán mầm non ) tình yêu, chúng ta thiếu đi trí tuệ. Đợi đến khi( Bé học đếm số ) có đủ trí tuệ, chúng ta đã không còn sức lực để yêu một tình yêu thuần khiết nữa.

    ReplyDelete
  13. Good.

    Freshpani is providing online water delivery service currently in BTM, Bangalore you can find more details at Freshpani.com
    Online Water Delivery | Bangalore Drinking Water Home Delivery Service | Packaged Drinking Water | Bottled Water Supplier

    ReplyDelete
  14. Дээд чанар бол зүгээр л( đá ruby thiên nhiên ) санаатай биш юм. Энэ нь өндөр( đá ruby nam phi ) түвшний төвлөрөл, тусгай хүчин( Đá Sapphire ) чармайлт, ухаалаг ( đá sapphire hợp mệnh gì )чиг баримжаа, чадварлаг туршлага, ( đá ruby đỏ )саад тотгорыг даван туулах( bán đá sapphire thô ) боломжийг хардаг.

    ReplyDelete
  15. Download and install Vidmate App which is the best HD video downloader software available for Android. Get free latest HD movies, songs, and your favorite TV shows

    ReplyDelete
  16. Thanks for sharing information with us. If someone wants to know about Taxi Service App and Health Management Software I think this is the right place for you.
    Taxi Dispatch App | Taxi Service Providers | Safety and Health Management System

    ReplyDelete
  17. Vanskeligheter( van bi ) vil passere. På samme måte som( van điện từ ) regnet utenfor( van giảm áp ) vinduet, hvor nostalgisk( van xả khí ) er det som til slutt( van bướm tay gạt ) vil fjerne himmelen.

    ReplyDelete
  18. Tökezlediğiniz ve ayağa kalkıp(  taxi Nội Bài ) devam edemediğiniz( taxi noi bai ) gibi görünen zamanlar vardır, lütfen bazen( taxi sân bay nội bài rẻ nhất )  zorlukların üstesinden gelmenize yardımcı olacak, yaşamınızla(số điện thoại taxi nội bài ) ilgili iyi ( dịch vụ taxi đi nội bài chất lượng ) et. Aşağıdaki makale, yaşam hakkında 100'den fazla güzel kelime size tanıtır.

    ReplyDelete
  19. This comment has been removed by the author.

    ReplyDelete
  20. hanks for sharing such an amazing article.http://www.webiinnovation.com/website-development-company-bangalore/

    ReplyDelete

  21. It’s awesome that you want to share those tips with us. I assume lot of us that commented on this post are just starting to search for different ways of blog promotion and this sounds promising. This is definitely the article that I will try to follow when I comment on others blogs. Cheers

    Data Science Training in Hyderabad

    Hadoop Training in Hyderabad

    Java Training in Hyderabad

    Python online Training in Hyderabad

    Tableau online Training in Hyderabad

    Blockchain online Training in Hyderabad

    informatica online Training in Hyderabad

    devops online Training

    ReplyDelete
  22. An amazing web journal I visit this blog, it's unbelievably wonderful. Oddly, in this blog's content made without a doubt and reasonable. The substance of data is informative.

    digital-marketing-course-in-hyderabad/

    digital-marketing-agency-in-hyderabad/

    selenium-training-in-hyderabad/

    salesforce-training-hyderabad/

    microsoft-azure-training-in-hyderabad/

    ReplyDelete
  23. Thank you for sharing the article,the article is very effective and informative

    Best Linux Online Training

    ReplyDelete
  24. Thank you for sharing the article. The data that you provided in the blog is informative and effective.

    Best Linux Online Training

    ReplyDelete
  25. Thanks for sharing this informative post. I m very pleased to read this article .I enjoy this site. its so usefully and helpfully post.Visit Webdots Hubli for best website design and development.
    webdesign in hubli
    seo service in hubli
    webdesign in dharwad
    digital marketing services
    digital marketing classes

    ReplyDelete
  26. Awesome Post. Great Content. It is very inspiring to read your post. Waiting for your updates.
    Microservices Online Training
    Microservices Training in Hyderabad

    ReplyDelete
  27. Thanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website
    top microservices online training
    best microservices online training
    microservices online training

    ReplyDelete
  28. Mind Q Systems provides AWS training in Hyderabad & Bangalore.AWS training designed for students and professionals. Mind Q Provides 100% placement assistance with AWS training.

    Mind Q Systems is a Software Training Institute in Hyderabad and Bangalore offering courses on Testing tools, selenium, java, oracle, Manual Testing, Angular, Python, SAP, Devops etc.to Job Seekers, Professionals, Business Owners, and Students. We have highly qualified trainers with years of real-time experience.

    AWS

    ReplyDelete

  29. Wow. That is so elegant and logical and clearly explained. Brilliantly goes through what could be a complex process and makes it obvious.I want to refer about the tableau course and tableau training videos

    ReplyDelete
  30. Linh kiện máy tính là một trong những thiết bị không thể thiếu của một bộ máy tính để bàn. Và câu hỏi mua linh kiện máy tính cũ ở đâu giá tốt hẳn là băn khoăn của nhiều người. Nếu bạn cũng đang cầm tìm một địa chỉ để mua mua linh kiện máy tính cũ giá tốt, hãy tham khảo thông tin ở bài viết dưới đây nhé:
    Mua linh kiện máy tính cũ ở đâu giá tốt

    ReplyDelete
  31. Great Share..We are a Seo Firm Bangalore offering services like SEO,PPC,SMM,online reputation management & web development both to small and medium companies.As a running offer,we are providing free performance audit for our customers

    ReplyDelete
  32. This comment has been removed by the author.

    ReplyDelete
  33. Thanks for your post! Really interesting blogs. Here is the some more interesting and most related links.

    Best digital marketing company in Dubai, United Arab Emirates. Brandstory is one of the top and best digital marketing companies in Dubai UAE. As a leading digital marketing agency in Dubai, We offer search engine optimization services, online marketing services, UI UX design services, search engine marketing services, email marketing services, Google / Facebook / Bing pay per click services, Internet marketing services, website design services and website development services, social media marketing services. Hire ROI based digital marketing services company in dubai to get digital leads for your business.

    Digital marketing company in Dubai | Digital Marketing Agency in Dubai | SEO Company in Dubai | SEO Agency in Dubai | Best Digital Marketing Companies in Dubai | Top Digital Marketing Agencies in Dubai | Best SEO Companies in Dubai | SEO Agencies in Dubai | Online Marketing Company in Dubai | SEO Services Company in Dubai | PPC Company in Dubai | PPC Agency in Dubai | | PPC Services in Dubai | Social Media Marketing Company in Dubai | Social Media Marketing Services in Dubai | Social Media Marketing Agencies in Dubai | Web Design Company in Dubai | Website Designers in Dubai | Website Development Services Company in Dubai | Web Design Companies in Dubai

    ReplyDelete
  34. This comment has been removed by the author.

    ReplyDelete

  35. Good Blog, thanks for sharing
    Today the companies are continually being challenged to reduce the expenses, most of working expenditures and other requirements. The main costs include the salary of employees like HR professional, accountant, auditors and administration. These problem can be overcome by best expert business outsourcing company. They provide quality and valuable services at low cost for the business enterprises. In UAE most of accounts payable outsourcing companies offers cost effective accounting services that will help the companies effectively in the current situation.
    Audit firms in UAE

    ReplyDelete
  36. Good Blog, thanks for sharing
    the intensity of smells can't be exaggerated. Smell has such a solid association with one's passionate express that it revives the recollections that went with our experience, in a few occasions, returning over numerous years. A deliberately built fragrance can lift one's state of mind, and places one out of a positive and innovative outlook. Our fragrance arrangements give you a chance to make the ideal experience for your customers and associates – one in which they remain drew in and associated.
    Aroma diffuser

    ReplyDelete
  37. Tan Binh Over 10 years of supplying water materials, our company is now a reliable partner for most water supply systems companies in Hanoi as well as nationwide. With products always available from famous brands like Jaky, Round Start, Uib, Jeoenu YD Valve are pleased to serve you.

    https://forums.vwvortex.com/member.php?3759327-vancongnghiephn
    https://www.darkreading.com/profile.asp?piddl_userid=396420


    https://www.designspiration.com/baogiavancongnghiep/saves/

    https://twinoid.com/user/9959449

    https://gold-forum.kitco.com/member.php?348377-vancongnghiephn

    ReplyDelete
  38. CHLEAR Agency provides complete marketing solutions along with Digital Marketing Services in Bangalore along with SEO, PPC, SEM, SMM, Content Marketing, Brand Strategy, Performance Marketing, Marketing Automation, ATL, BTL and PR activities

    Digital Marketing Agency in Bangalore

    ReplyDelete
  39. One of the best Digital marketing agency which provide SEO, SMO, PPC, Mobile Application Devlopment, etc We have quite good experience with leading brands

    Digital Marketing Agency in Bangalore

    ReplyDelete
  40. A marketing program is one that relies on a content plan that is fantastic. Nevertheless, the issue is. Is it the same promotion? Can we need it? This guide will give you answers to all queries that are such. Go on, allow the learning to begin
    Digital Marketing Agency in Bangalore

    ReplyDelete
  41. wow, great, I was wondering how to cure acne naturally. and found your site by google, learned a lot, now i’m a bit clear. I’ve bookmark your site and also add rss. keep us updated.
    data science course in hyderabad
    data analytics course in hyderabad
    business analytics course in hyderabad

    ReplyDelete
  42. The previous evening I was scanning for extraordinary online journals and afterward, I saw your blog. Decent sort of data that you have shared on your blog. I truly like your work. I additionally need to share a site website development and will help those individuals who are keen on it. Obliged you for sharing your blog.

    ReplyDelete
  43. Thanks for sharing valuable information and very well explained. Keep posting.

    workday studio online training
    workday online training

    ReplyDelete
  44. Thanks for the Information.Interesting stuff to read.Great Article. I enjoyed reading your post, very nice share.
    Innomatics - Data Science Course Training in Hyderabad

    ReplyDelete
  45. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. keep it up

    python training in bangalore

    python training in hyderabad

    python online training

    python training

    python flask training

    python flask online training

    python training in coimbatore

    ReplyDelete
  46. Great post, I really interesting the way you highlighted some important points.I never seen these type of article in my life ..its really wonderful Thanks very much, I appreciate your post.
    Java Training in Chennai

    Java Training in Bangalore

    Java Training in Hyderabad

    Java Training
    Java Training in Coimbatore

    ReplyDelete
  47. Thank you for sharing the article. The data that you provided in the blog is informative and effective.

    Power Bi Training in Hyderabad

    ReplyDelete
  48. KEEN SEO Agency – SEO agency in India focused on providing full-service Search Engine Optimization Solutions that include specialized Local SEO, National SEO, Ecommerce SEO services for small businesses in Bangalore, India.

    ReplyDelete
  49. ISO Certification in Delhi – Genveritas a global ISO Certification Consulting firm represents considerable authority in tweaked and result-situated answers for assisting organizations to actualize change and improve business execution.

    ReplyDelete
  50. Thank you for sharing the article. The data that you provided in the blog is informative and effective.

    DevOps Training in Hyderabad

    ReplyDelete
  51. Blog is very informative about Web Development, keep up the work and be sharing such posts.
    Visit us on: Website Development Company in Bangalore

    ReplyDelete
  52. Thank you so much for shearing this type of post.
    This is very much helpful for me. Keep up for this type of good post.
    please visit us below
    data science training in Hyderabad

    ReplyDelete
  53. I truly like your style of blogging. I added it to my preferred's blog webpage list and will return soon…
    https://360digitmg.com/course/certification-program-in-data-science

    ReplyDelete
  54. I'm glad to share my comment with you and the other readers like me who have been searching for the knowledge. thanks for making my way ease to get the required information.
    360DigiTMG courses on data analyticss

    ReplyDelete
  55. Gaatha OFFERINGS
    • STORIES - From classics writers like Premchand, Amrita Preetam to newer generation writers covering all moods.

    • POETRIES - For all sorts of emotions.

    • KIDS SECTION – Dadi nani ki kahani, Vikarm betal, Akbar Beerbal, Singhasan Battsi and many more

    • MOTIVATIONAL – Key notes from motivational speakers, Real life stories of struggle and success in Josh talk series etc.

    • SPRITIUAL – Religious content- from Geeta saar to mabharat stories. And also special series of finding our inner-self.

    ReplyDelete
  56. We are well established IT and outsourcing firm working in the market since 2013. We are providing training to the people ,
    like- Web Design , Graphics Design , SEO, CPA Marketing & YouTube Marketing.Call us Now whatsapp: +(88) 01537587949
    : Digital Marketing Training
    Free bangla sex video:careful
    good post outsourcing institute in bangladesh

    ReplyDelete
  57. Thank you for sharing this post. I would like to share this Astrologer in London UK

    ReplyDelete
  58. Thank you for sharing this post. I would like to share this Astrologer in London

    ReplyDelete
  59. Thank you for sharing this post. I would like to share this Best Astrologer in London

    ReplyDelete
  60. Thank you for sharing the article. The data that you provided in the blog is informative and effective.

    Servicenow Training in Hyderabad

    ReplyDelete
  61. The Bhagwat Geeta, often referred to as the Gita, is a 700-verse Hindu scripture that is part of the epic Mahabharata, commonly dated to the second century BCE. The Gita is set in a narrative framework of a dialogue between Pandava prince Arjuna and his guide and charioteer Krishna. Visit for listen on Gaatha

    ReplyDelete
  62. Thanks for sharing valuable information and very well explained. Keep posting.

    Agricultural Investment Company

    ReplyDelete
  63. Very beautiful work which helps everyone
    https://kricketkafunda.blogspot.com/

    ReplyDelete
  64. Tu mujhe backlinka deda m tumha paiisa dudunga
    https://kricketkafunda.blogspot.com/2021/02/ind-vs-eng-4th-test-india-vs-england.html

    ReplyDelete
  65. I really appreciate this amazing post which you have provided for us. I assure that it will be beneficial for most people.
    Check Out The Best SEO ServicesIn Bangalore | SEO Agency In Bangalore |
    Social Media Agency In Bangalore|
    Social Media Marketing Agency In Bangalore|
    Social Media Marketing In Bangalore|

    ReplyDelete
  66. I feel happy about and learning more about this topic. keep sharing your information regularly for my future reference. This content creates new hope and inspiration within me. Thanks for sharing an article like this. the information which you have provided is better than another blog.
    AWS Training in Hyderabad
    AWS Course in Hyderabad

    ReplyDelete
  67. Hi! You want high quality web traffic ?
    Digital Marketing Companies in Dubai High quality traffic that is laser targeted is going to generate a better ROI than traffic that is not.

    ReplyDelete
  68. With today's modern society, the demanding needs of people are increasing. Not only beauty, eating and playing, but choosing a child's bedroom also requires a lot of factors. Because the bedroom is a place to rest, relax, study and sometimes also play a place for your baby. More: Phòng ngủ trẻ em, Giường tầng bé traiNội thất trẻ em

    ReplyDelete
  69. Thanks for sharing information please share more information to eLearning platform.

    ReplyDelete
  70. Thanks for sharing valuable information and very well explained. SEO Services in BangaloreKeep posting.
    SEO Company in Bangalore

    ReplyDelete

  71. Thanks for the interesting content. I like your post and your blog is amazing.
    If you are interested in Video Downloader apps you can check my blog site. It is new and really informative.

    utorrent pro mod apk free download

    ReplyDelete
  72. Best Digital Marketing Company in Bangalore, India, provides best digital solutions to clients spread across India. Digicellar is a Google Adwords Partner Agency having experts in digital domains. Our Experts can help you build your brand online with a free SEO audit .Contact us for all your internet marketing needs.

    ReplyDelete
  73. Hung was formerly an official distributor of industrial lubricants of Shell in the North. Currently, in addition to oil trading, we also trade in transportation and equipment trading. After nearly 12 years of establishment and development, Yen Hung is now a prestigious partner of nearly 10,000 large and small domestic and international factories. Main products:
    giá dầu truyền nhiệt
    dầu bánh răng
    dầu tuần hoàn
    dầu dẫn nhiệt
    dầu thủy lực shell
    mỡ bò bôi trơn chịu nhiệt

    ReplyDelete
  74. Emblix Academy – Digital marketing institute in KPHB, we address all major and minor aspects required for any student’s advancement in digital marketing. Clutch USA named our Digital Marketing Institute the best SEO firm.

    The future of digital marketing is promising and full of possibilities.

    As a result, skilled digital marketers who can keep up with the rising demand are in high order.

    In the Emblix Academy Digital marketing institute in KPHB, you will learn about all the major and minor modules of digital marketing, from Search engine marketing to Social Media Marketing and almost all Tools used for Digital Marketing. for more info visit here :- https://emblixacademy.com/

    ReplyDelete
  75. I need to thank you for this very good read and I have bookmarked to check out new things from your post. Thank you very much for sharing such a useful article and Will definitely save and revisit your site.

    Mobile Application Development services Service

    ReplyDelete
  76. This amazing cream is rich in vitamins and other essential nutrients, which are the main reason behind its popularity among customers. But before buying this product, you must make sure whether the ingredients present in the vita glow night cream are suitable for your skin or not. There are some ingredients, which may cause allergy to you and your skin and if you have sensitive skin then it may result in complications. So it is recommended to take the advice of a doctor before using any such cream. If you are not able to find a good doctor who can guide you regarding your skin then researching on the internet would be beneficial for you to find a good night cream.

    imbms

    ReplyDelete
  77. Top ranking is very important for your online business and it is the only way to success online. According to the sources, the first page of Google gives 95 percent web traffic whereas if your website are coming to the second page, then you will get only 5 percent of the total traffic, so rank your website at first page on google is important for your business.

    SEO Company in Bangalore

    ReplyDelete
  78. In the Emblix Academy Digital marketing institute in KPHB, you will learn about all the major and minor modules of digital marketing, from Search engine marketing to Social Media Marketing and almost all Tools used for Digital Marketing.

    One stop place for all Digital Marketing courses! Emblix Academy is a Team of dedicated Professionals with 12years of experience in various Digital Platforms. We assure to provide the best Digital Marketing courses to enhance your Career.

    https://emblixacademy.com/

    ReplyDelete
  79. A good blog always comes-up with new and exciting information and while reading I have feel that this blog is really have all those quality that qualify a blog to be a one.
    data scientist training in malaysia

    ReplyDelete
  80. Really awesome post, informative and knowledgeable content. Keep sharing more stuff with us. Thank you.
    Data Science Courses

    ReplyDelete
  81. Digital Marketing Institute in KPHB, we address all major and minor aspects required for any student’s advancement in digital marketing. Clutch USA named our Digital Marketing Institute the best SEO firm.

    The future of digital marketing is promising and full of possibilities.
    As a result, skilled digital marketers who can keep up with the rising demand are in high order.

    In the Emblix Academy Digital marketing institute in KPHB, you will learn about all the major and minor modules of digital marketing, from Search engine marketing to Social Media Marketing and almost all Tools used for Digital Marketing.


    Website: Digital Marketing Institute in KPHB

    ReplyDelete
  82. Your blog provided us with valuable information to work with. Each & every tip of your post is awesome. Thanks a lot for sharing. Keep blogging,
    data analytics courses in hyderabad

    ReplyDelete
  83. I would like to take this opportunity to thank the author for his incredible work. I believe Customer relationship management is essential for every business to create a loyal customer base. keep doing it. all the best
    CRM Software In India

    ReplyDelete
  84. I definitely enjoy every little bit of it. It is a great website and nice share. I want to thank you. Good job! You guys do a great blog, and have some great contents. Keep it up

    Online School Management Software in India

    ReplyDelete
  85. Thank you for sharing valuable and nicely & well explained information. Keep posting.

    Optimist Brand Design

    ReplyDelete
  86. Sands Casino | New Mexico's First Casino - Sunda's
    Welcome choegocasino to Sunda's newest online casino! Play slots, 인카지노 live casino games, hit Jackpot games, Roulette, Video Poker and more. In addition to septcasino video poker

    ReplyDelete
  87. It's amazing content that you have presented here with us.

    Potato Planter

    ReplyDelete
  88. Hi Dude

    Great posting ever I read this kind of articles. Please share more postings

    ReplyDelete
  89. Thanks for sharing such an interesting article. People should know this type of information to run in the flow and be present about what's going on in the market Website: https://emblixacademy.com/

    ReplyDelete
  90. I like the valuable information you provided in your article. I am sure I will learn many new things here! Good luck

    SEO Company Pune
    SEO Pune

    ReplyDelete
  91. Mulesoft is the most popular integration platform on the market. Attend the Unogeeks' Best Mulesoft Training Course if you wish to become a Mulesoft Certified Developer (Top Mulesoft Training Institute)

    ReplyDelete
  92. Nice post,Thanks for sharing really interesting and informative content. with some great tool recommendation.
    we are the Top Web Development Company in Bangalore

    ReplyDelete
  93. wordpress website design agency in united states Need professional WordPress Web Design Services? We're experts in developing attractive mobile-friendly WordPress websites for businesses. Contact us today!

    ReplyDelete
  94. We are a search engine optimization company in Dubai, UAE. SEO Services in Dubai We offer our best SEO services to businesses looking to rank higher on Google and get the attention they deserve

    ReplyDelete
  95. मुझे नागिन के पूरे एपिसोड के सभी सीज़न उच्च गुणवत्ता में मिले हैं, कृपया नागिन 6 ऑनलाइन देखने के लिए इस वेबसाइट पर जाएँ नागिन 6

    ReplyDelete
  96. This post seems to be really quite interesting as well as informative too. Thanks for sharing such an awesome information.We look forward to your feedback on best digital marketing services in Surat

    ReplyDelete