Тупой details php image id. Как изменить размер изображений в Битриксе или выполнить ресайз

Last modified on February 24th, 2017 by Vincy.

While displaying images for our websites, it is important to ensure that it could be set within our layout boundary. If not, we need to resize these images, accordingly. In PHP, resizing an image, it can be achieved by using a set of PHP functions to create a new image from scratch, with the given dimensions, in which the original image is expected to be resized.

So, a combination of such functions is used to obtain the following steps, which will result in successful image resize through PHP programming.

  • Get image id for the source image.
  • Get resource id for target image layer.
  • Resizing and reassembling.
  • Save resized image into given target location.

Get Image Resource Id for Source Image

For working on the given image file to be resized, we need to get the resource identifier for reference, as we have done while after getting file resource, or like, getting directory handle to perform .

In PHP, there are various functions to get an image file resource id. These functions are used appropriately based on the type of image given for resizing. For example, imagecreatefromjpeg() , imagecreatefromgif() , imagecreatefrompng() , used to get the resource identifier for JPEG, GIF and PNG images.

In this step, first, we need to get image type by using PHP function getimagesize() , which is used for getting an entire list of image properties, including width, height and etc. After that, we can apply a suitable function to get the resource id. All these PHP functions used to get image properties and to get image file resource data expects name or path of the image file. For example,

$file = "christmas.jpg"; $source_properties = getimagesize($file); $image_type = $source_properties; if($image_type == IMAGETYPE_JPEG) { $image_resource_id = imagecreatefromjpeg($file); } elseif($image_type == IMAGETYPE_GIF) { $image_resource_id = imagecreatefromgif($file); } elseif($image_type == IMAGETYPE_PNG) { $image_resource_id = imagecreatefrompng($file); }

The used in conditional statements are predefined with appropriate integer value denotes image type. For example, IMAGETYPE_JPEG defined with value 2 which is used for indicating JPEG image.

Get Resource Id for Target Image Layer

After getting reference resource id from source image file, we need to create a new image as a target layer. This image will be created with the dimensions to what the original image is expected to be resized.

PHP built-in function, named as, imagecreatetruecolor() is used for this purpose, by accepting required dimensions, that is, the width and height of the target image. For example,

$target_width =200; $target_height =200; $target_layer=imagecreatetruecolor($target_width,$target_height);

imagecreatetruecolor() function will create empty image. Added to that, it will return resource data identifier as a reference to the newly created image with specified width and height parameter. This reference will be used in subsequent steps, for mentioning target, on top of which the resized image will be assembled.

Resizing and Reassembling

For this step, we should provide a list of details about the source and the target image, that are used in image resize process. These are,

  • Source and target layer resource id
  • Dimensions for denoting width and height of the original image and target image layer.

Using these details provided, required portion of the original image will be copied and reassembled onto the target layer. For that, PHP function, named as, imagecopyresampled() for such resizing and reassembling process. For example,

Imagecopyresampled($target_layer,$image_resource_id,0,0,0,0,$target_width,$target_height, $source_properties,$source_properties);

In this code sample, shown above, some of the arguments of this function are passed with 0 value. These arguments, actually, represents the x, y coordinates of target and source image, respectively.

These arguments will contain values for cropping some portion of the source image. Otherwise, there is no need to mention x,y points, meaning that, the entire image will be cropped to preserve its appearance as it is except its dimensions.

Note: There is an equivalent PHP function imagecopyresized() as like as imagecopyresampled() , whereas, the imagecopyresampled() function creates resized the image with more quality, comparatively.

Save Resized Image into Target Location

Finally, it’s time for saving resized image to the target location. For that, we need to specify the following details.

  • Resource id of the resized image layer.
  • Target image name or location.

Now, we can use the code sample shown below to save resized image layer.

Imagejpeg($target_layer,"christmas_thump.jpg");

Code sample shown in each step is applicable only for JPEG image. We can replicate the same for other image types by using appropriate PHP functions.

Example: PHP Image Resize

This example shows how to resize any type of image file uploaded from an HTML form. So, the PHP script is shown below handles the uploaded image file to be resized.

And the HTML code which includes the form container to upload image file is,

Вы наверняка задавались вопросом «Что это за цифры и где мой путь к картинке?» 🙂 Давайте разберем несколько примеров, как с этим можно работать.

Как узнать полный путь к картинке в Битриксе

Файлы изображений нам обычно нужны, когда мы говорим за новости или товары. За такие поля, как правило, отвечают свойства элемента «Картинка для анонса » и «Детальная картинка «. Иногда, создают свойства инфоблока, тип этого свойства файл, и используют для дополнительных изображений (например, галерея товаров). Вся проблема в том, что Битрикс не даст вам сразу готовый путь к файлу изображения, или к его уменьшенной ресайз копии.

Советую для начала прочесть небольшую статью про вывод элементов на странице т.к. в дальнейшем мы столкнемся с похожим кодом.

"ASC"), Array("IBLOCK_ID" => $iblock_id), false, false, Array("ID", "NAME", "DETAIL_PAGE_URL", "PREVIEW_PICTURE", "DETAIL_PICTURE")); while($ar_fields = $my_elements->GetNext()) { echo $ar_fields["PREVIEW_PICTURE"]."
"; } endif; ?>

и на самом деле все отработало правильно, мы получили «код изображений», некий уникальный идентификатор файла, по которому мы сможем получить данные.

В 1С-Битрикс есть класс CFile — который используется для работы с файлами и изображениями. Мы воспользуемся его методом GetPath и получим полный путь к изображению на примере картинки для анонса (для детальной все точно также):

"ASC"), Array("IBLOCK_ID" => $iblock_id), false, false, Array("ID", "NAME", "DETAIL_PAGE_URL", "PREVIEW_PICTURE", "DETAIL_PICTURE")); while($ar_fields = $my_elements->
"; $img_path = CFile::GetPath($ar_fields["PREVIEW_PICTURE"]); echo $img_path."
"; } endif; ?>

Теперь у меня выводит:

/upload/iblock/c2a/c2a29aad47791f81f6fa8fd038d83789.jpg /upload/iblock/35e/35e000d0e7c3a94b32fb086c627f87eb.jpg /upload/iblock/088/08847400f3c59cae1371cf97009228a9.jpg

Отлично, это то что нужно. Теперь мы при помощи HTML тега img сможем задать картинке путь. Меняем нашу строчку с echo

Echo "
";

Как изменить размер изображений в Битриксе или выполнить ресайз

Перед тем как создать проект или новый инфоблок, всегда думайте «какого размера должны быть мои изображения «. Это очень важно, т.к. если вы не настроите в информационном блоке уменьшение картинки после загрузки, генерацию картинки анонса из детальной (если нужно) и прочие параметры, то размер вашей страницы может превышать несколько мегабайт (а в очень редких случаях даже больше 10 мб 🙂).

На самом деле, когда вы строго задаете размеры изображению, используя CSS, картинка все равно грузится в полном размере, и такие вещи не прокатят:

//HTML //CSS .my-prev-image { width: 200px; height: 200px; }

Это не решит нашу проблему с размером исходного изображения на странице, и единственные допустимые правила, на мой взгляд, могут быть max-width и max-height .

Рассмотрим случай, когда у нас уже есть большие картинки и мы хотим получить их уменьшенные копии. Нам поможет метод CFile::ResizeImageGet . Его преимущество в том, что когда мы запускаем страницу, он создает картинки в папке /upload/resize_cache/путь — и если такая картинка уже есть, он автоматически вернет нам путь к ней. Кроме того, мы можем задавать любой размер, качество и даже вид масштабирования изображений.

Вот какие типы нам доступны (информация взята из официальной документации Битрикс ):

  • BX_RESIZE_IMAGE_EXACT — масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая лишнее;
  • BX_RESIZE_IMAGE_PROPORTIONAL — масштабирует с сохранением пропорций, размер ограничивается $arSize;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT — масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.

Давайте попробуем уменьшить наши картинки используя ResizeImageGet:

"ASC"), Array("IBLOCK_ID" => $iblock_id), false, false, Array("ID", "NAME", "DETAIL_PAGE_URL", "PREVIEW_PICTURE", "DETAIL_PICTURE")); while($ar_fields = $my_elements->GetNext()) { //echo $ar_fields["PREVIEW_PICTURE"]."
"; //$img_path = CFile::GetPath($ar_fields["PREVIEW_PICTURE"]); $img_resize_path = CFile::ResizeImageGet($ar_fields["PREVIEW_PICTURE"], array("width"=>"100", "height"=>"150"), BX_RESIZE_IMAGE_PROPORTIONAL); //echo "

";print_r($img_resize_path);echo "
"; echo "
"; } endif; ?>

$img_resize_path[‘src’] — надеюсь вы заметили что этот метод возвращает нам массив, и нам нужен только src .

Разберем по порядку:

$ ar_ fields[« PREVIEW_ PICTURE»] — поле для кода файла (для детальной меняем на $ar_fields[«DETAIL_PICTURE»]),

array(‘ width’=>’100′, ‘ height’=>’150′) — размеры итогового изображения (или вышеупомянутый arSize),

BX_ RESIZE_ IMAGE_ PROPORTIONAL — тип масштабирования, про котором наши изображения не будут вылазить за указанные границы.

В официальной документации этого метода есть подробное описание, кроме того, там описываются остальные 4 параметра, которые мы тут не использовали (InitSizes, Filters, Immediate, jpgQuality) .

Over the past few years, web hosting has undergone a dramatic change. Web hosting services have changed the way websites perform. There are several kinds of services but today we will talk about the options that are available for reseller hosting providers. They are Linux Reseller Hosting and Windows Reseller Hosting. Before we understand the fundamental differences between the two, let’s find out what is reseller hosting.

Reseller Hosting

In simple terms, reseller hosting is a form of web hosting where an account owner can use his dedicated hard drive space and allotted bandwidth for the purpose of reselling to the websites of third parties. Sometimes, a reseller can take a dedicated server from a hosting company (Linux or Windows) on rent and further let it out to third parties.

Most website users either are with Linux or Windows. This has got to do with the uptime. Both platforms ensure that your website is up 99% of the time.

1. Customization

One of the main differences between a Linux Reseller Hostingplan and the one provided by Windows is about customization. While you can experiment with both the players in several ways, Linux is way more customizable than Windows. The latter has more features than its counterpart and that is why many developers and administrators find Linux very customer- friendly.

2. Applications

Different reseller hosting services have different applications. Linux and Windows both have their own array of applications but the latter has an edge when it comes to numbers and versatility. This has got to do with the open source nature of Linux. Any developer can upload his app on the Linux platform and this makes it an attractive hosting provider to millions of website owners.

However, please note that if you are using Linux for web hosting but at the same time use the Windows OS, then some applications may not simply work.

3. Stability

While both the platforms are stable, Linux Reseller Hosting is more stable of the two. It being an open source platform, can work in several environments.This platform can be modified and developed every now and then.

4. .NET compatibility

It isn’t that Linux is superior to Windows in every possible way. When it comes to .NET compatibility, Windows steals the limelight. Web applications can be easily developed on a Windows hosting platform.

5. Cost advantages

Both the hosting platforms are affordable. But if you are feeling a cash crunch, then you should opt for Linux. It is free and that is why it is opted by so many developers and system administrators all around the world.

6. Ease of setup

Windows is easier to set up than its counterpart. All things said and done, Windows still retains its user-friendliness all these years.

7. Security

Opt for Linux reseller hosting because it is more secure than Windows. This holds true especially for people running their E-commerce businesses.

Conclusion

Choosing between the two will depend on your requirement and the cost flexibility. Both the hosting services have unique advantages. While Windows is easy to set up, Linux is cost effective, secure and is more versatile.



Back in March of this year, I had a very bad experience with a media company refusing to pay me and answer my emails. They still owe me thousands of dollars and the feeling of rage I have permeates everyday. Turns out I am not alone though, and hundreds of other website owners are in the same boat. It"s sort of par for the course with digital advertising.

In all honesty, I"ve had this blog for a long time and I have bounced around different ad networks in the past. After removing the ad units from that company who stiffed me, I was back to square one. I should also note that I never quite liked Googles AdSense product, only because it feels like the "bottom of the barrel" of display ads. Not from a quality perspective, but from a revenue one.

From what I understand, you want Google advertising on your site, but you also want other big companies and agencies doing it as well. That way you maximize the demand and revenue.

After my negative experience I got recommend a company called Newor Media . And if I"m honest I wasn"t sold at first mostly because I couldn"t find much information on them. I did find a couple decent reviews on other sites, and after talking to someone there, I decided to give it a try. I will say that they are SUPER helpful. Every network I have ever worked with has been pretty short with me in terms of answers and getting going. They answered every question and it was a really encouraging process.

I"ve been running the ads for a few months and the earnings are about in line with what I was making with the other company. So I can"t really say if they are that much better than others, but where they do stand out is a point that I really want to make. The communication with them is unlike any other network I"ve ever worked it. Here is a case where they really are different:

They pushed the first payment to me on time with Paypal. But because I"m not in the U.S (and this happens for everyone I think), I got a fee taken out from Paypal. I emailed my representative about it, asking if there was a way to avoid that in the future.

They said that they couldn"t avoid the fee, but that they would REIMBURSE ALL FEES.... INCLUDING THE MOST RECENT PAYMENT! Not only that, but the reimbursement payment was received within 10 MINUTES! When have you ever been able to make a request like that without having to be forwarded to the "finance department" to then never be responded to.

The bottom line is that I love this company. I might be able to make more somewhere else, I"m not really sure, but they have a publisher for life with me. I"m not a huge site and I don"t generate a ton of income, but I feel like a very important client when I talk to them. It"s genuinely a breathe of fresh air in an industry that is ripe with fraud and non-responsiveness.

Microcomputers that have been created by the Raspberry Pi Foundation in 2012 have been hugely successful in sparking levels of creativity in young children and this UK based company began offering learn-to-code startup programs like pi-top an Kano. There is now a new startup that is making use of Pi electronics, and the device is known as Pip, a handheld console that offers a touchscreen, multiple ports, control buttons and speakers. The idea behind the device is to engage younger individuals with a game device that is retro but will also offer a code learning experience through a web based platform.

The amazing software platform being offered with Pip will offer the chance to begin coding in Python, HTML/CSS, JavaScript, Lua and PHP. The device offers step-by-step tutorials to get children started with coding and allows them to even make LEDs flash. While Pip is still a prototype, it will surely be a huge hit in the industry and will engage children who have an interest in coding and will provide them the education and resources needed to begin coding at a young age.

Future of Coding

Coding has a great future, and even if children will not be using coding as a career, they can benefit from learning how to code with this new device that makes it easier than ever. With Pip, even the youngest coding enthusiasts will learn different languages and will be well on their way to creating their own codes, own games, own apps and more. It is the future of the electronic era and Pip allows the basic building blocks of coding to be mastered.
Computer science has become an important part of education and with devices like the new Pip , children can start to enhance their education at home while having fun. Coding goes far beyond simply creating websites or software. It can be used to enhance safety in a city, to help with research in the medical field and much more. Since we now live in a world that is dominated by software, coding is the future and it is important for all children to at least have a basic understanding of how it works, even if they never make use of these skills as a career. In terms of the future, coding will be a critical component of daily life. It will be the language of the world and not knowing computers or how they work can pose challenges that are just as difficult to overcome as illiteracy.
Coding will also provide major changes in the gaming world, especially when it comes to online gaming, including the access of online casinos. To see just how coding has already enhanced the gaming world, take a look at a few top rated casino sites that rely on coding. Take a quick peek to check it out and see just how coding can present realistic environments online.

How Pip Engages Children

When it comes to the opportunity to learn coding, children have many options. There are a number of devices and hardware gizmos that can be purchased, but Pip takes a different approach with their device. The portability of the device and the touchscreen offer an advantage to other coding devices that are on the market. Pip will be fully compatible with electronic components in addition to the Raspberry Pi HAT system. The device uses standard languages and has basic tools and is a perfect device for any beginner coder. The goal is to remove any barriers between an idea and creation and make tools immediately available for use. One of the other great advantages of Pip is that it uses a SD card, so it can be used as a desktop computer as well when it is connected to a monitor and mouse.
The Pip device would help kids and interested coder novice with an enthusiasm into learning and practicing coding. By offering a combination of task completion and tinkering to solve problems, the device will certainly engage the younger generation. The device then allows these young coders to move to more advanced levels of coding in different languages like JavaScript and HTML/CSS. Since the device replicates a gaming console, it will immediately capture the attention of children and will engage them to learn about coding at a young age. It also comes with some preloaded games to retain attention, such as Pac-Man and Minecraft.

Innovations to Come

Future innovation largely depends on a child’s current ability to code and their overall understanding of the process. As children learn to code at an early age by using such devices as the new Pip, they will gain the skills and knowledge to create amazing things in the future. This could be the introduction of new games or apps or even ideas that can come to life to help with medical research and treatments. There are endless possibilities. Since our future will be controlled by software and computers, starting young is the best way to go, which is why the new Pip is geared towards the young crowd. By offering a console device that can play games while teaching coding skills, young members of society are well on their way to being the creators of software in the future that will change all our lives. This is just the beginning, but it is something that millions of children all over the world are starting to learn and master. With the use of devices like Pip, coding basics are covered and children will quickly learn the different coding languages that can lead down amazing paths as they enter adulthood. Members can add or update their photo to their membership account. This is popularly known as profile photo. We will learn how to add profile photo by a member.

This script is a part of membership management script so profile photo can be added or updated by the member after login. Here there is a membership table where all details of the member is stored. You can see the structure of the membership table here.

Watch the last column where we store the file name.

Unique file name

Each member profile photo is stored in a common folder so the file names are to be unique. Each member has one unique member id and user id. Hence we will store the file name along with the member id. For example for user id plus2net member id is 4. Hence the file name will be 4.jpg

You can add userid also to the file name. like plus2net.jpg

Where to store the profile pictures.

In the root of the script there is a folder profile-photo . Here we are uploading all images and storing profile photo. If you want to change the folder then it can be done inside memadmin area two different files used for uploading photo.

You must give write permission to this folder to enable file upload.

How members can add profile photo

After login member can go to memadmin area saying settings. From memadmin area there are two links, one is to update profile and one more to update or add profile photo.


On visiting the profile photo page , the old profile photo page if already added will be displayed below the upload photo button. Here user can use the upload button to select a new profile photo from its computer. On Clicking the choose file button user can browse local computer files and select an image of jpg or gif type. Other file type are not allowed.

Once uploaded the file extension is checked for gif or jpg type images otherwise file is deleted.

After uploading the script check the dimensions of image and they are reduced proportionately to the required size. $n_width=100; // Fix the width of the thumb nail images $n_height=100; // Fix the height of the thumb nail image you can read more on here.

Once the resizing of images are over it is time to update the record with new file name. In our member table we store details of each member. For profile picture we have a column profile_photo . We will update this column with our new file name.

We will take member id which is unique and is present as session variable for updating record in where clause.

Here is the code for updating record with pfile photo. Note that we are not storing the photo in the table but storing the file name against member record. $sql=$dbo->prepare("update mem_signup set profile_photo=:profile_photo where mem_id=$_SESSION and userid="$_SESSION""); $sql->bindParam(":profile_photo",$profile_file_name,PDO::PARAM_STR, 199); if($sql->execute()){ echo "

"; echo ""; }// End of if profile is ok else{ print_r($sql->errorInfo()); $msg="
"; }

How to check script or add profile photo

Download the script and install the database file. Inside Memadmin directory there are two files, profile-photo.php & profile-photock.php .
This is a part of Membership Management Script.

Script part

There are two files, one is profile-photo.php and other one is profile-photock.php .

profile-photo.php

This file show the upload button and handle the form. Here is the code $profile_photo_path="../profile-photo/"; $count=$dbo->prepare("select profile_photo from mem_signup where mem_id=:mem_id"); $count->bindParam(":mem_id",$_SESSION["mem_id"],PDO::PARAM_INT,1); if($count->execute()){ $row = $count->fetch(PDO::FETCH_OBJ); }else{ print_r($dbo->errorInfo()); } echo "
"; if(strlen($row->profile_photo) > 1){ // Path where thumb nail image will be stored $tsrc=$profile_photo_path.$row->profile_photo; echo ""; } /////////////////////////////

profile-photock.php

This file upload the photo and place them in a directory after resizing it. Here is the code. $profile_photo_path="../profile-photo/"; // To display file name, temp name and file type , //use them for testing your script only////// //echo "File Name: ".$_FILES["userfile"]["name"]."
"; //echo "tmp name: ".$_FILES["userfile"]["tmp_name"]."
"; //echo "File Type: ".$_FILES["userfile"]["type"]."
"; //echo "

"; /////////////////// // the path with the file name where the file will be stored. $add=$profile_photo_path.$_FILES["userfile"]["name"]; //echo $add; if(move_uploaded_file ($_FILES["userfile"]["tmp_name"],$add)){ //echo "
Successfully uploaded the image
"; chmod("$add",0777); }else{echo "
Failed to upload file Contact Site admin to fix the problem
"; @unlink($add); exit;} ///////////////////////// if (!($_FILES["userfile"]["type"] =="image/jpeg" OR $_FILES["userfile"]["type"]=="image/gif")){ echo "
Your uploaded file must be of JPG or GIF. Other file types are not allowed
"; unlink($add); exit;} ////////////////// ///////// Start the thumbnail generation////////////// $n_width=100; // Fix the width of the thumb nail images $n_height=100; // Fix the height of the thumb nail image if($_FILES["userfile"]["type"]=="image/gif") { $im=ImageCreateFromGIF($add); $width=ImageSx($im); // Original picture width is stored $height=ImageSy($im); // Original picture height is stored $newimage=imagecreatetruecolor($n_width,$n_height); imageCopyResized($newimage,$im,0,0,0,0,$n_width,$n_height,$width,$height); $profile_file_name=$_SESSION["mem_id"].".gif"; // Path where thumb nail image will be stored $tsrc=$profile_photo_path.$profile_file_name; if (function_exists("imagegif")) { Header("Content-type: image/gif"); ImageGIF($newimage,$tsrc); } elseif (function_exists("imagejpeg")) { Header("Content-type: image/jpeg"); ImageJPEG($newimage,$tsrc); } chmod("$tsrc",0777); }////////// end of gif file thumb nail creation////////// ////////////// starting of JPG thumb nail creation////////// if($_FILES["userfile"]["type"]=="image/jpeg"){ $im=ImageCreateFromJPEG($add); $width=ImageSx($im); // Original picture width is stored $height=ImageSy($im); // Original picture height is stored $newimage=imagecreatetruecolor($n_width,$n_height); imageCopyResized($newimage,$im,0,0,0,0,$n_width,$n_height,$width,$height); $profile_file_name=$_SESSION["mem_id"].".jpg"; // Path where thumb nail image will be stored $tsrc=$profile_photo_path.$profile_file_name; ImageJpeg($newimage,$tsrc); chmod("$tsrc",0777); } $sql=$dbo->prepare("update mem_signup set profile_photo=:profile_photo where mem_id=$_SESSION and userid="$_SESSION""); $sql->bindParam(":profile_photo",$profile_file_name,PDO::PARAM_STR, 199); if($sql->execute()){ echo "
Successfully updated Profile photo
"; echo ""; }// End of if profile is ok else{ print_r($sql->errorInfo()); $msg="
Database problem, please contact site admin
"; } unlink($add); echo $msg;

Похожие статьи

  • Как узнать свой КПД в World Of Tanks?

    КПД в World of Tanks - это коэффициент полезного действия игрока, польза которую вы принесли команде за бой. В расчет КПД входит нанесенный дамаг, убитая техника, засветы, помощь команде. Как поднять КПД в World of Tanks? В этой статье мы...

  • Теплоход сура. И двигается, и рулит

    В 19 веке и первой половине двадцатого столетия наши реки бороздили колесные пассажирские и буксирные суда. Этим летом в первый рейс по Волге отправится современный колесник. Однако это вовсе не дань моде на ретро. Небольшой по размерам и...

  • Крымский мост: кто на самом деле топит украинские порты?

    12:29 — REGNUM ИА REGNUM продолжает знакомить читателей с объектами инфраструктуры Украины. А ключевой элемент инфраструктуры любой страны, имеющей выход к морю, — порты. Инфраструктуры не только транспортной, но и экономической,...

  • Интернет- мешает нормально жить

    Современные технологии дают возможность развивать скорость до одного гигабайта бытовым пользователям. Но медленное соединение не позволяет в полной мере наслаждаться всеми преимуществами информационного века. Интернет может тормозить по...

  • Медленно работает интернет

    Интернет на вашем мобильном более уязвим к внешним условиям, чем ноутбуки и компьютеры. Сигнал во многом зависит от зон покрытия 2G и 3G, Wi-Fi точек, мощности станций-трансляторов, погодных условий и вашей личной кармы. Очень часто...

  • InstallPack скачать бесплатно русская версия

    Приложение InstallPack для быстрой и удобной загрузки на пк нескольких программ одновременно. Позволяет установить самые свежие версии ПО от разных разработчиков, минуя запуск браузера. Инстал Пак существенно упрощает поиск и загрузку...